From 5554f5ebced8adb7b7982481120d0ca00767c7f9 Mon Sep 17 00:00:00 2001
From: Leonardo Vannucci <leonardo.vannucci@grupposistematica.it>
Date: Wed, 01 Aug 2018 09:48:18 +0200
Subject: [PATCH] primi sviluppi

---
 .gitignore                                                                                |   73 ++
 dg1cloud-core/target/classes/it/digione/dg1cloud/service/CloudService$2.class             |    0 
 dg1cloud-core/target/classes/it/digione/dg1cloud/pojo/UploadedFileDescriptorOk.class      |    0 
 dg1cloud-core/src/main/java/it/digione/dg1cloud/config/dg1cloud.properties                |   16 
 dg1cloud-core/src/main/java/it/digione/dg1cloud/config/AppConfig.java                     |  104 +++
 dg1cloud-core/target/classes/it/digione/dg1cloud/controller/DownloadFileController.class  |    0 
 dg1cloud-core/src/main/resources/application.properties                                   |   19 
 dg1cloud-core/target/classes/it/digione/dg1cloud/config/AppConfig.class                   |    0 
 dg1cloud-core/target/classes/it/digione/dg1cloud/service/CleanerService.class             |    0 
 dg1cloud-core/target/classes/it/digione/dg1cloud/repository/RegDocumentRepository.class   |    0 
 dg1cloud-core/pom.xml                                                                     |   94 +++
 dg1cloud-core/src/main/java/it/digione/dg1cloud/repository/RegDocumentRepository.java     |   23 
 dg1cloud-core/src/test/java/it/digione/cloud/Dg1cloudCoreApplicationTests.java            |   22 
 dg1cloud-core/mvnw                                                                        |  225 +++++++
 dg1cloud-core/src/main/java/it/digione/dg1cloud/service/CleanerService.java               |   60 ++
 dg1cloud-core/src/main/java/it/digione/dg1cloud/pojo/UploadedFileDescriptor.java          |   29 +
 dg1cloud-core/src/main/java/it/digione/dg1cloud/controller/DownloadFileController.java    |   63 ++
 dg1cloud-core/target/classes/META-INF/maven/it.digione.cloud/dg1cloud-core/pom.properties |    7 
 dg1cloud-core/src/main/java/it/digione/dg1cloud/app/Dg1cloudCoreApplication.java          |   21 
 dg1cloud-core/target/classes/it/digione/dg1cloud/service/Utils.class                      |    0 
 dg1cloud-core/.mvn/wrapper/maven-wrapper.properties                                       |    1 
 dg1cloud-core/target/classes/it/digione/dg1cloud/scheduler/RepositoryJob.class            |    0 
 dg1cloud-core/target/classes/application.properties                                       |   19 
 dg1cloud-core/target/classes/it/digione/dg1cloud/config/dg1cloud.properties               |   16 
 dg1cloud-core/src/main/java/it/digione/dg1cloud/service/Utils.java                        |   52 +
 dg1cloud-core/WebContent/WEB-INF/web.xml                                                  |   12 
 dg1cloud-core/src/main/java/it/digione/dg1cloud/model/RegDocument.java                    |  152 +++++
 dg1cloud-core/target/classes/it/digione/dg1cloud/model/RegDocument.class                  |    0 
 dg1cloud-core/target/classes/it/digione/dg1cloud/service/CloudService$1.class             |    0 
 dg1cloud-core/target/test-classes/it/digione/cloud/Dg1cloudCoreApplicationTests.class     |    0 
 dg1cloud-core/mvnw.cmd                                                                    |  143 ++++
 dg1cloud-core/target/classes/db/migration/V0.1__DG1CLOUD.sql                              |   27 
 dg1cloud-core/src/main/java/db/migration/V0.1__DG1CLOUD.sql                               |   27 
 dg1cloud-core/target/classes/it/digione/dg1cloud/pojo/UploadedFileDescriptor.class        |    0 
 dg1cloud-core/WebContent/META-INF/MANIFEST.MF                                             |    3 
 dg1cloud-core/src/main/java/it/digione/dg1cloud/scheduler/RepositoryJob.java              |   56 +
 dg1cloud-core/target/classes/META-INF/persistence.xml                                     |    9 
 dg1cloud-core/target/classes/META-INF/maven/it.digione.cloud/dg1cloud-core/pom.xml        |   94 +++
 dg1cloud-core/.mvn/wrapper/maven-wrapper.jar                                              |    0 
 dg1cloud-core/src/main/java/it/digione/dg1cloud/pojo/UploadedFileDescriptorOk.java        |   20 
 dg1cloud-core/target/classes/META-INF/MANIFEST.MF                                         |   10 
 dg1cloud-core/target/classes/it/digione/dg1cloud/app/Dg1cloudCoreApplication.class        |    0 
 dg1cloud-core/src/main/java/META-INF/persistence.xml                                      |    9 
 dg1cloud-core/src/main/java/it/digione/dg1cloud/service/CloudService.java                 |  332 +++++++++++
 dg1cloud-core/target/classes/it/digione/dg1cloud/service/CloudService.class               |    0 
 45 files changed, 1,738 insertions(+), 0 deletions(-)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..f1e22eb
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,73 @@
+
+# Created by https://www.gitignore.io/api/eclipse
+
+### Eclipse ###
+
+.metadata
+bin/
+tmp/
+*.tmp
+*.bak
+*.swp
+*~.nib
+local.properties
+.settings/
+.loadpath
+.recommenders
+
+# External tool builders
+.externalToolBuilders/
+
+# Locally stored "Eclipse launch configurations"
+*.launch
+
+# PyDev specific (Python IDE for Eclipse)
+*.pydevproject
+
+# CDT-specific (C/C++ Development Tooling)
+.cproject
+
+# CDT- autotools
+.autotools
+
+# Java annotation processor (APT)
+.factorypath
+
+# PDT-specific (PHP Development Tools)
+.buildpath
+
+# sbteclipse plugin
+.target
+
+# Tern plugin
+.tern-project
+
+# TeXlipse plugin
+.texlipse
+
+# STS (Spring Tool Suite)
+.springBeans
+
+# Code Recommenders
+.recommenders/
+
+# Annotation Processing
+.apt_generated/
+
+# Scala IDE specific (Scala & Java development for Eclipse)
+.cache-main
+.scala_dependencies
+.worksheet
+
+### Eclipse Patch ###
+# Eclipse Core
+.project
+
+# JDT-specific (Eclipse Java Development Tools)
+.classpath
+
+# Annotation Processing
+.apt_generated
+
+
+# End of https://www.gitignore.io/api/eclipse
\ No newline at end of file
diff --git a/dg1cloud-core/.mvn/wrapper/maven-wrapper.jar b/dg1cloud-core/.mvn/wrapper/maven-wrapper.jar
new file mode 100644
index 0000000..9cc84ea
--- /dev/null
+++ b/dg1cloud-core/.mvn/wrapper/maven-wrapper.jar
Binary files differ
diff --git a/dg1cloud-core/.mvn/wrapper/maven-wrapper.properties b/dg1cloud-core/.mvn/wrapper/maven-wrapper.properties
new file mode 100644
index 0000000..b573bb5
--- /dev/null
+++ b/dg1cloud-core/.mvn/wrapper/maven-wrapper.properties
@@ -0,0 +1 @@
+distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.3/apache-maven-3.5.3-bin.zip
diff --git a/dg1cloud-core/WebContent/META-INF/MANIFEST.MF b/dg1cloud-core/WebContent/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..254272e
--- /dev/null
+++ b/dg1cloud-core/WebContent/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path: 
+
diff --git a/dg1cloud-core/WebContent/WEB-INF/web.xml b/dg1cloud-core/WebContent/WEB-INF/web.xml
new file mode 100644
index 0000000..96bdff6
--- /dev/null
+++ b/dg1cloud-core/WebContent/WEB-INF/web.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
+  <display-name>dg1cloud-core</display-name>
+  <welcome-file-list>
+    <welcome-file>index.html</welcome-file>
+    <welcome-file>index.htm</welcome-file>
+    <welcome-file>index.jsp</welcome-file>
+    <welcome-file>default.html</welcome-file>
+    <welcome-file>default.htm</welcome-file>
+    <welcome-file>default.jsp</welcome-file>
+  </welcome-file-list>
+</web-app>
\ No newline at end of file
diff --git a/dg1cloud-core/mvnw b/dg1cloud-core/mvnw
new file mode 100644
index 0000000..5bf251c
--- /dev/null
+++ b/dg1cloud-core/mvnw
@@ -0,0 +1,225 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Maven2 Start Up Batch script
+#
+# Required ENV vars:
+# ------------------
+#   JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+#   M2_HOME - location of maven2's installed home dir
+#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
+#     e.g. to debug Maven itself, use
+#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+if [ -z "$MAVEN_SKIP_RC" ] ; then
+
+  if [ -f /etc/mavenrc ] ; then
+    . /etc/mavenrc
+  fi
+
+  if [ -f "$HOME/.mavenrc" ] ; then
+    . "$HOME/.mavenrc"
+  fi
+
+fi
+
+# OS specific support.  $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+mingw=false
+case "`uname`" in
+  CYGWIN*) cygwin=true ;;
+  MINGW*) mingw=true;;
+  Darwin*) darwin=true
+    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
+    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
+    if [ -z "$JAVA_HOME" ]; then
+      if [ -x "/usr/libexec/java_home" ]; then
+        export JAVA_HOME="`/usr/libexec/java_home`"
+      else
+        export JAVA_HOME="/Library/Java/Home"
+      fi
+    fi
+    ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+  if [ -r /etc/gentoo-release ] ; then
+    JAVA_HOME=`java-config --jre-home`
+  fi
+fi
+
+if [ -z "$M2_HOME" ] ; then
+  ## resolve links - $0 may be a link to maven's home
+  PRG="$0"
+
+  # need this for relative symlinks
+  while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+      PRG="$link"
+    else
+      PRG="`dirname "$PRG"`/$link"
+    fi
+  done
+
+  saveddir=`pwd`
+
+  M2_HOME=`dirname "$PRG"`/..
+
+  # make it fully qualified
+  M2_HOME=`cd "$M2_HOME" && pwd`
+
+  cd "$saveddir"
+  # echo Using m2 at $M2_HOME
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME=`cygpath --unix "$M2_HOME"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
+fi
+
+# For Migwn, ensure paths are in UNIX format before anything is touched
+if $mingw ; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME="`(cd "$M2_HOME"; pwd)`"
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
+  # TODO classpath?
+fi
+
+if [ -z "$JAVA_HOME" ]; then
+  javaExecutable="`which javac`"
+  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
+    # readlink(1) is not available as standard on Solaris 10.
+    readLink=`which readlink`
+    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
+      if $darwin ; then
+        javaHome="`dirname \"$javaExecutable\"`"
+        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
+      else
+        javaExecutable="`readlink -f \"$javaExecutable\"`"
+      fi
+      javaHome="`dirname \"$javaExecutable\"`"
+      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
+      JAVA_HOME="$javaHome"
+      export JAVA_HOME
+    fi
+  fi
+fi
+
+if [ -z "$JAVACMD" ] ; then
+  if [ -n "$JAVA_HOME"  ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+      # IBM's JDK on AIX uses strange locations for the executables
+      JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+      JAVACMD="$JAVA_HOME/bin/java"
+    fi
+  else
+    JAVACMD="`which java`"
+  fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+  echo "Error: JAVA_HOME is not defined correctly." >&2
+  echo "  We cannot execute $JAVACMD" >&2
+  exit 1
+fi
+
+if [ -z "$JAVA_HOME" ] ; then
+  echo "Warning: JAVA_HOME environment variable is not set."
+fi
+
+CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
+
+# traverses directory structure from process work directory to filesystem root
+# first directory with .mvn subdirectory is considered project base directory
+find_maven_basedir() {
+
+  if [ -z "$1" ]
+  then
+    echo "Path not specified to find_maven_basedir"
+    return 1
+  fi
+
+  basedir="$1"
+  wdir="$1"
+  while [ "$wdir" != '/' ] ; do
+    if [ -d "$wdir"/.mvn ] ; then
+      basedir=$wdir
+      break
+    fi
+    # workaround for JBEAP-8937 (on Solaris 10/Sparc)
+    if [ -d "${wdir}" ]; then
+      wdir=`cd "$wdir/.."; pwd`
+    fi
+    # end of workaround
+  done
+  echo "${basedir}"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+  if [ -f "$1" ]; then
+    echo "$(tr -s '\n' ' ' < "$1")"
+  fi
+}
+
+BASE_DIR=`find_maven_basedir "$(pwd)"`
+if [ -z "$BASE_DIR" ]; then
+  exit 1;
+fi
+
+export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
+echo $MAVEN_PROJECTBASEDIR
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME=`cygpath --path --windows "$M2_HOME"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
+  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
+    MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
+fi
+
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+exec "$JAVACMD" \
+  $MAVEN_OPTS \
+  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
diff --git a/dg1cloud-core/mvnw.cmd b/dg1cloud-core/mvnw.cmd
new file mode 100644
index 0000000..019bd74
--- /dev/null
+++ b/dg1cloud-core/mvnw.cmd
@@ -0,0 +1,143 @@
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements.  See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership.  The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License.  You may obtain a copy of the License at
+@REM
+@REM    http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied.  See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Maven2 Start Up Batch script
+@REM
+@REM Required ENV vars:
+@REM JAVA_HOME - location of a JDK home dir
+@REM
+@REM Optional ENV vars
+@REM M2_HOME - location of maven2's installed home dir
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
+@REM     e.g. to debug Maven itself, use
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM ----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
+
+@REM set %HOME% to equivalent of $HOME
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
+
+@REM Execute a user defined script before this one
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
+if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM To isolate internal variables from possible post scripts, we use another setlocal
+@setlocal
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%" == "" goto OkJHome
+
+echo.
+echo Error: JAVA_HOME not found in your environment. >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+:OkJHome
+if exist "%JAVA_HOME%\bin\java.exe" goto init
+
+echo.
+echo Error: JAVA_HOME is set to an invalid directory. >&2
+echo JAVA_HOME = "%JAVA_HOME%" >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+@REM ==== END VALIDATION ====
+
+:init
+
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set EXEC_DIR=%CD%
+set WDIR=%EXEC_DIR%
+:findBaseDir
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set WDIR=%CD%
+goto findBaseDir
+
+:baseDirFound
+set MAVEN_PROJECTBASEDIR=%WDIR%
+cd "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
+cd "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
+
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
+if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%" == "on" pause
+
+if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
+
+exit /B %ERROR_CODE%
diff --git a/dg1cloud-core/pom.xml b/dg1cloud-core/pom.xml
new file mode 100644
index 0000000..1fcf8c8
--- /dev/null
+++ b/dg1cloud-core/pom.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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">
+	<modelVersion>4.0.0</modelVersion>
+
+	<groupId>it.digione.cloud</groupId>
+	<artifactId>dg1cloud-core</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+	<packaging>jar</packaging>
+
+	<name>dg1cloud-core</name>
+	<description>Servizio cloud per ricezione file</description>
+
+	<parent>
+		<groupId>org.springframework.boot</groupId>
+		<artifactId>spring-boot-starter-parent</artifactId>
+		<version>2.0.3.RELEASE</version>
+		<relativePath/> <!-- lookup parent from repository -->
+	</parent>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+		<java.version>1.8</java.version>
+	</properties>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-data-jpa</artifactId>
+		</dependency>
+		
+		<dependency>
+			<groupId>org.flywaydb</groupId>
+			<artifactId>flyway-core</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-test</artifactId>
+			<scope>test</scope>
+		</dependency>
+		
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-web</artifactId>
+		</dependency>
+		
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-tomcat</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		
+		<dependency>
+			<groupId>org.postgresql</groupId>
+			<artifactId>postgresql</artifactId>
+		</dependency>
+		
+		<dependency>
+			<groupId>org.eclipse.persistence</groupId>
+			<artifactId>eclipselink</artifactId>
+			<version>2.5.0</version>
+		</dependency>
+		
+		<dependency>
+			<groupId>com.fasterxml.jackson.core</groupId>
+			<artifactId>jackson-databind</artifactId>
+		</dependency>
+		
+		<dependency>
+			<groupId>commons-io</groupId>
+			<artifactId>commons-io</artifactId>
+			<version>2.6</version>
+		</dependency>
+		
+		<dependency>
+			<groupId>commons-codec</groupId>
+			<artifactId>commons-codec</artifactId>
+			</dependency>
+		
+	</dependencies>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.springframework.boot</groupId>
+				<artifactId>spring-boot-maven-plugin</artifactId>
+			</plugin>
+		</plugins>
+	</build>
+
+
+</project>
diff --git a/dg1cloud-core/src/main/java/META-INF/persistence.xml b/dg1cloud-core/src/main/java/META-INF/persistence.xml
new file mode 100644
index 0000000..3ea7c16
--- /dev/null
+++ b/dg1cloud-core/src/main/java/META-INF/persistence.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
+	<persistence-unit name="dg1cloud-core">
+		<class>it.digione.dg1cloud.model.RegDocument</class>
+		<properties>
+			<property name="eclipselink.jdbc.batch-writing" value="JDBC"/>
+		</properties>
+	</persistence-unit>
+</persistence>
diff --git a/dg1cloud-core/src/main/java/db/migration/V0.1__DG1CLOUD.sql b/dg1cloud-core/src/main/java/db/migration/V0.1__DG1CLOUD.sql
new file mode 100644
index 0000000..aab3b34
--- /dev/null
+++ b/dg1cloud-core/src/main/java/db/migration/V0.1__DG1CLOUD.sql
@@ -0,0 +1,27 @@
+-- Table: public.reg_document
+CREATE TABLE public.reg_document
+(
+    document_id bigint NOT NULL,
+    created timestamp without time zone NOT NULL DEFAULT now(),
+    createdby character varying(255) NOT NULL,
+    modified timestamp without time zone NOT NULL DEFAULT now(),
+    modifiedby character varying(255) NOT NULL,
+    file_hash character varying(255),
+    file_name text NOT NULL,
+    file_path text NOT NULL,
+    file_size bigint,
+    due_date date,
+    CONSTRAINT reg_document_pkey PRIMARY KEY (document_id)
+)
+WITH (
+    OIDS = FALSE
+);
+
+CREATE SEQUENCE public.reg_document_seq
+    INCREMENT 1
+    START 1
+    MINVALUE 1
+    MAXVALUE 9223372036854775807
+    CACHE 1;
+    
+    
diff --git a/dg1cloud-core/src/main/java/it/digione/dg1cloud/app/Dg1cloudCoreApplication.java b/dg1cloud-core/src/main/java/it/digione/dg1cloud/app/Dg1cloudCoreApplication.java
new file mode 100644
index 0000000..afe51f8
--- /dev/null
+++ b/dg1cloud-core/src/main/java/it/digione/dg1cloud/app/Dg1cloudCoreApplication.java
@@ -0,0 +1,21 @@
+package it.digione.dg1cloud.app;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+import org.springframework.context.annotation.ComponentScan;
+
+@ComponentScan(basePackages="it.digione.dg1cloud")
+@SpringBootApplication
+public class Dg1cloudCoreApplication extends SpringBootServletInitializer {
+
+	public static void main(String[] args) {
+		SpringApplication.run(Dg1cloudCoreApplication.class, args);
+	}
+	
+	@Override
+	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
+		return application.sources(Dg1cloudCoreApplication.class);
+	}
+}
diff --git a/dg1cloud-core/src/main/java/it/digione/dg1cloud/config/AppConfig.java b/dg1cloud-core/src/main/java/it/digione/dg1cloud/config/AppConfig.java
new file mode 100644
index 0000000..bc5e0e7
--- /dev/null
+++ b/dg1cloud-core/src/main/java/it/digione/dg1cloud/config/AppConfig.java
@@ -0,0 +1,104 @@
+package it.digione.dg1cloud.config;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.persistence.EntityManagerFactory;
+import javax.sql.DataSource;
+
+import org.eclipse.persistence.config.BatchWriting;
+import org.eclipse.persistence.config.PersistenceUnitProperties;
+import org.eclipse.persistence.config.TargetServer;
+import org.springframework.beans.factory.ObjectProvider;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.autoconfigure.domain.EntityScan;
+import org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration;
+import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
+import org.springframework.boot.autoconfigure.transaction.TransactionManagerCustomizers;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.context.annotation.PropertySources;
+import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
+import org.springframework.orm.jpa.JpaTransactionManager;
+import org.springframework.orm.jpa.vendor.AbstractJpaVendorAdapter;
+import org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter;
+import org.springframework.transaction.PlatformTransactionManager;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+import org.springframework.transaction.jta.JtaTransactionManager;
+
+@ComponentScan
+@Configuration
+@PropertySources({
+	@PropertySource(value = "classpath:/it/digione/dg1cloud/config/dg1cloud.properties", ignoreResourceNotFound=false),
+	@PropertySource(value = "file:/etc/digione/dg1cloud/application.properties", ignoreResourceNotFound=true)
+		})
+@EnableAutoConfiguration
+@EnableConfigurationProperties
+@EnableJpaRepositories("it.digione.dg1cloud.repository")
+@EntityScan("it.digione.dg1cloud.model")
+@EnableTransactionManagement
+public class AppConfig extends JpaBaseConfiguration implements Serializable{
+	
+	protected AppConfig(DataSource dataSource, JpaProperties properties,
+			ObjectProvider<JtaTransactionManager> jtaTransactionManager,
+			ObjectProvider<TransactionManagerCustomizers> transactionManagerCustomizers) {
+		super(dataSource, properties, jtaTransactionManager, transactionManagerCustomizers);
+	}
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -662074265587285778L;
+	
+	@Value("${application.version}")
+	private String applicationVersion;
+	public String getApplicationVersion() {
+		return applicationVersion;
+	}
+	
+	@Value("${repository.base.upload.path}")
+	private String repositoryBaseUploadPath;
+	public String getRepositoryBaseUploadPath() {
+		return repositoryBaseUploadPath;
+	}
+	
+	@Value("${repository.base.storage.path}")
+	private String repositoryBaseStoragePath;
+	public String getRepositoryBaseStoragePath() {
+		return repositoryBaseStoragePath;
+	}
+	
+	@Value("${external.server.address.base.url}")
+	private String externalBaseUrl;
+	public String getExternalBaseUrl() {
+		return externalBaseUrl;
+	}
+	
+	@Bean
+	public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {
+		final JpaTransactionManager transactionManager = new JpaTransactionManager();
+		transactionManager.setEntityManagerFactory(emf);
+		return transactionManager;
+	}
+ 
+	@Override
+	protected AbstractJpaVendorAdapter createJpaVendorAdapter() {
+		return new EclipseLinkJpaVendorAdapter();
+	}
+ 
+	@Override
+	protected Map<String, Object> getVendorProperties() {
+		final Map<String, Object> map = new HashMap<>();
+		map.put(PersistenceUnitProperties.BATCH_WRITING, BatchWriting.JDBC);
+		map.put(PersistenceUnitProperties.WEAVING, "static");
+		map.put(PersistenceUnitProperties.DEPLOY_ON_STARTUP, "true");
+		map.put(PersistenceUnitProperties.TARGET_SERVER, TargetServer.DEFAULT);
+		return map;
+	}	
+	
+}
diff --git a/dg1cloud-core/src/main/java/it/digione/dg1cloud/config/dg1cloud.properties b/dg1cloud-core/src/main/java/it/digione/dg1cloud/config/dg1cloud.properties
new file mode 100644
index 0000000..f74bf52
--- /dev/null
+++ b/dg1cloud-core/src/main/java/it/digione/dg1cloud/config/dg1cloud.properties
@@ -0,0 +1,16 @@
+application.version=v0.0.1beta
+
+repository.base.upload.path=/etc/dg1cloud/repository/upload
+repository.base.storage.path=/etc/dg1cloud/repository/storage
+
+repository.scanner.job.fixed.delay=60000
+repository.scanner.job.initial.delay=1000
+
+repository.cleaner.job.fixed.delay=60000
+repository.cleaner.job.initial.delay=1000
+
+repository.dircleaner.job.cron=0 0 5 * * *
+
+server.servlet.context-path=/dg1cloud
+
+external.server.address.base.url=http://vannux.grupposistematica.it:8080/dg1cloud
\ No newline at end of file
diff --git a/dg1cloud-core/src/main/java/it/digione/dg1cloud/controller/DownloadFileController.java b/dg1cloud-core/src/main/java/it/digione/dg1cloud/controller/DownloadFileController.java
new file mode 100644
index 0000000..076a8db
--- /dev/null
+++ b/dg1cloud-core/src/main/java/it/digione/dg1cloud/controller/DownloadFileController.java
@@ -0,0 +1,63 @@
+package it.digione.dg1cloud.controller;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+import javax.servlet.ServletContext;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.InputStreamResource;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import it.digione.dg1cloud.model.RegDocument;
+import it.digione.dg1cloud.repository.RegDocumentRepository;
+import it.digione.dg1cloud.service.CloudService;
+
+@Controller
+public class DownloadFileController {
+	
+	private static final Logger logger = LoggerFactory.getLogger(CloudService.class);
+	
+	@Autowired private ServletContext servletContext;
+	@Autowired private RegDocumentRepository regDocumentRepository;
+	
+	@RequestMapping("/downloadFile")
+	public ResponseEntity<InputStreamResource> downloadFile(@RequestParam String fileName, @RequestParam long id) throws IOException {
+		
+		logger.debug("Avvio download file {} con id {}, fileName, id");
+		
+		MediaType mediaType = MediaType.APPLICATION_OCTET_STREAM;
+		try {
+			mediaType = MediaType.parseMediaType(servletContext.getMimeType(fileName));
+		} catch (Exception e) {
+			logger.warn("Errore nello stabilire il mime type del file. VerrĂ  usato " + mediaType.toString(), e);
+		}
+		
+		RegDocument regDocument = regDocumentRepository.getOne(id);
+		
+		if (regDocument.getFileName().equalsIgnoreCase(fileName) == false ) {
+			logger.error("Il nome del file richiesto non corrisponde con quello referenziato dall'id");
+			throw new RuntimeException("Il nome del file richiesto non corrisponde con quello referenziato dall'id");
+		}
+		
+		File file = new File(regDocument.getFilePath());
+		FileInputStream fis = new FileInputStream(file);
+		InputStreamResource isr = new InputStreamResource(fis);
+		return ResponseEntity.ok()
+				// Content-Disposition
+				.header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + file.getName())
+				// Content-Type
+				.contentType(mediaType)
+				// Contet-Length
+				.contentLength(file.length()) //
+				.body(isr);
+	}
+}
diff --git a/dg1cloud-core/src/main/java/it/digione/dg1cloud/model/RegDocument.java b/dg1cloud-core/src/main/java/it/digione/dg1cloud/model/RegDocument.java
new file mode 100644
index 0000000..83f2690
--- /dev/null
+++ b/dg1cloud-core/src/main/java/it/digione/dg1cloud/model/RegDocument.java
@@ -0,0 +1,152 @@
+package it.digione.dg1cloud.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.*;
+
+/**
+ * The persistent class for the reg_classification database table.
+ * 
+ */
+@Entity
+@Table(name="reg_document")
+@Cacheable(false)
+@SequenceGenerator(name="reg_document_seq", sequenceName="reg_document_seq", allocationSize=1 )
+public class RegDocument implements Serializable {
+
+	private static final long serialVersionUID = -3682129109212204091L;
+	
+	@Id 
+	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="reg_document_seq")
+	@Column(name="document_id")
+	private Long documentId;
+	
+	@Temporal(TemporalType.TIMESTAMP)
+	private Date created;
+	
+	@Column(name="createdby")
+	private String createdBy;
+	
+	@Temporal(TemporalType.TIMESTAMP)
+	private Date modified;
+	
+	@Column(name="modifiedby")
+	private String modifiedBy;
+
+	@Column(name="file_hash")
+	private String fileHash;
+	
+	@Column(name="file_name")
+	private String fileName;
+	
+	@Column(name="file_path")
+	private String filePath;
+	
+	@Column(name="file_size")
+	private Long fileSize;
+	
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name="due_date")
+	private Date dueDate;
+	
+	public RegDocument() {
+	}
+	
+	@PrePersist
+	public void prePersist() {
+		Date now = new Date();
+	    if(created == null) //We set default value in case if the value is not set yet.
+	    	created = now; 
+	    if(modified == null) //We set default value in case if the value is not set yet.
+	    	modified = now;
+	}
+
+	public Long getDocumentId() {
+		return documentId;
+	}
+
+	public void setDocumentId(Long documentId) {
+		this.documentId = documentId;
+	}
+
+	public Date getCreated() {
+		return created;
+	}
+
+	public void setCreated(Date created) {
+		this.created = created;
+	}
+
+	public String getCreatedBy() {
+		return createdBy;
+	}
+
+	public void setCreatedBy(String createdBy) {
+		this.createdBy = createdBy;
+	}
+
+	public Date getModified() {
+		return modified;
+	}
+
+	public void setModified(Date modified) {
+		this.modified = modified;
+	}
+
+	public String getModifiedBy() {
+		return modifiedBy;
+	}
+
+	public void setModifiedBy(String modifiedBy) {
+		this.modifiedBy = modifiedBy;
+	}
+
+	public String getFileHash() {
+		return fileHash;
+	}
+
+	public void setFileHash(String fileHash) {
+		this.fileHash = fileHash;
+	}
+
+	public String getFileName() {
+		return fileName;
+	}
+
+	public void setFileName(String fileName) {
+		this.fileName = fileName;
+	}
+
+	public String getFilePath() {
+		return filePath;
+	}
+
+	public void setFilePath(String filePath) {
+		this.filePath = filePath;
+	}
+
+	public Long getFileSize() {
+		return fileSize;
+	}
+
+	public void setFileSize(Long fileSize) {
+		this.fileSize = fileSize;
+	}
+	
+	public Date getDueDate() {
+		return dueDate;
+	}
+
+	public void setDueDate(Date dueDate) {
+		this.dueDate = dueDate;
+	}
+
+	@Override
+	public String toString() {
+		return "RegDocument [documentId=" + documentId + ", created=" + created + ", createdBy=" + createdBy
+				+ ", modified=" + modified + ", modifiedBy=" + modifiedBy + ", fileHash=" + fileHash + ", filePath="
+				+ filePath + ", fileSize=" + fileSize + ", dueDate=" + dueDate + "]";
+	}
+	
+}
\ No newline at end of file
diff --git a/dg1cloud-core/src/main/java/it/digione/dg1cloud/pojo/UploadedFileDescriptor.java b/dg1cloud-core/src/main/java/it/digione/dg1cloud/pojo/UploadedFileDescriptor.java
new file mode 100644
index 0000000..f7bf4f9
--- /dev/null
+++ b/dg1cloud-core/src/main/java/it/digione/dg1cloud/pojo/UploadedFileDescriptor.java
@@ -0,0 +1,29 @@
+package it.digione.dg1cloud.pojo;
+
+import java.util.Date;
+
+public class UploadedFileDescriptor {
+
+	private String fileName;
+	private String sha256;
+	private Date dueDate; //Data nel formato ISO-8601 - es: 2018-07-27T18:25:43.511Z
+	
+	public String getFileName() {
+		return fileName;
+	}
+	public void setFileName(String fileName) {
+		this.fileName = fileName;
+	}
+	public String getSha256() {
+		return sha256;
+	}
+	public void setSha256(String sha256) {
+		this.sha256 = sha256;
+	}
+	public Date getDueDate() {
+		return dueDate;
+	}
+	public void setDueDate(Date dueDate) {
+		this.dueDate = dueDate;
+	}
+}
diff --git a/dg1cloud-core/src/main/java/it/digione/dg1cloud/pojo/UploadedFileDescriptorOk.java b/dg1cloud-core/src/main/java/it/digione/dg1cloud/pojo/UploadedFileDescriptorOk.java
new file mode 100644
index 0000000..18609fa
--- /dev/null
+++ b/dg1cloud-core/src/main/java/it/digione/dg1cloud/pojo/UploadedFileDescriptorOk.java
@@ -0,0 +1,20 @@
+package it.digione.dg1cloud.pojo;
+
+public class UploadedFileDescriptorOk {
+
+	private String fileName;
+	private String url;
+	
+	public String getFileName() {
+		return fileName;
+	}
+	public void setFileName(String fileName) {
+		this.fileName = fileName;
+	}
+	public String getUrl() {
+		return url;
+	}
+	public void setUrl(String url) {
+		this.url = url;
+	}
+}
diff --git a/dg1cloud-core/src/main/java/it/digione/dg1cloud/repository/RegDocumentRepository.java b/dg1cloud-core/src/main/java/it/digione/dg1cloud/repository/RegDocumentRepository.java
new file mode 100644
index 0000000..35b4df3
--- /dev/null
+++ b/dg1cloud-core/src/main/java/it/digione/dg1cloud/repository/RegDocumentRepository.java
@@ -0,0 +1,23 @@
+package it.digione.dg1cloud.repository;
+
+import java.util.List;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import it.digione.dg1cloud.model.RegDocument;
+
+@Repository
+@Transactional( propagation = Propagation.REQUIRED )
+public interface RegDocumentRepository extends JpaRepository<RegDocument, Long> {
+	
+	@Query("SELECT d FROM RegDocument d WHERE d.fileHash = :fileHash and d.fileName = :fileName")
+	RegDocument findOneByHashAndName(@Param("fileHash") String fileHash, @Param("fileName") String fileName);
+	
+	@Query("SELECT d FROM RegDocument d WHERE CURRENT_DATE > d.dueDate")
+	List<RegDocument> findAllRegDocumentExpired();
+}
diff --git a/dg1cloud-core/src/main/java/it/digione/dg1cloud/scheduler/RepositoryJob.java b/dg1cloud-core/src/main/java/it/digione/dg1cloud/scheduler/RepositoryJob.java
new file mode 100644
index 0000000..fba0002
--- /dev/null
+++ b/dg1cloud-core/src/main/java/it/digione/dg1cloud/scheduler/RepositoryJob.java
@@ -0,0 +1,56 @@
+package it.digione.dg1cloud.scheduler;
+
+import java.io.IOException;
+import java.security.NoSuchAlgorithmException;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+
+import it.digione.dg1cloud.service.CleanerService;
+import it.digione.dg1cloud.service.CloudService;
+
+@Configuration
+@EnableScheduling
+public class RepositoryJob {
+	
+	private static final Logger logger = LoggerFactory.getLogger(RepositoryJob.class);
+	
+	@Autowired private CloudService cloudService;
+	@Autowired private CleanerService cleanerService;
+	
+	@Scheduled(
+		fixedDelayString = "${repository.scanner.job.fixed.delay}",
+		initialDelayString = "${repository.scanner.job.initial.delay}"
+	)
+	public void scannerJob() throws JsonParseException, JsonMappingException, NoSuchAlgorithmException, IOException {
+		logger.debug("Avvio servizio controllo home directory");
+		cloudService.scannAccountHomeDirs();
+		logger.debug("Fine");
+	}
+	
+	@Scheduled(
+		fixedDelayString = "${repository.cleaner.job.fixed.delay}",
+		initialDelayString = "${repository.cleaner.job.initial.delay}"
+	)
+	public void cleanerJob() {
+		logger.debug("Avvio servizio rimozione file scaduti");
+		cleanerService.cleanExpiredStoredFiles();
+		logger.debug("Fine");
+	}
+	
+	@Scheduled(
+		cron = "${repository.dircleaner.job.cron}"
+	)
+	public void dirCleanerJob() {
+		logger.debug("Avvio servizio rimozione directory vuote");
+		cleanerService.cleanEmptyStorageFolder();
+		logger.debug("Fine");
+	}
+}
diff --git a/dg1cloud-core/src/main/java/it/digione/dg1cloud/service/CleanerService.java b/dg1cloud-core/src/main/java/it/digione/dg1cloud/service/CleanerService.java
new file mode 100644
index 0000000..5442841
--- /dev/null
+++ b/dg1cloud-core/src/main/java/it/digione/dg1cloud/service/CleanerService.java
@@ -0,0 +1,60 @@
+package it.digione.dg1cloud.service;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.commons.io.FileUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import it.digione.dg1cloud.config.AppConfig;
+import it.digione.dg1cloud.model.RegDocument;
+import it.digione.dg1cloud.repository.RegDocumentRepository;
+
+@Service("cleanerService")
+public class CleanerService {
+
+	private static final Logger logger = LoggerFactory.getLogger(CleanerService.class);
+	
+	@Autowired private Utils utils;
+	@Autowired private AppConfig appConfig;
+	@Autowired private RegDocumentRepository regDocumentRepository;
+	
+	public void cleanExpiredStoredFiles() {
+		
+		List<RegDocument> regDocuments = regDocumentRepository.findAllRegDocumentExpired();
+		logger.debug("Trovati {} documenti da cancellare", regDocuments.size());
+		
+		for ( RegDocument regDocument : regDocuments ) {
+			logger.debug("Rimozione file {}", regDocument.getFilePath());
+			File cloudFile = new File( regDocument.getFilePath() );
+			if (cloudFile.exists() == true ) {
+				FileUtils.deleteQuietly(cloudFile);
+			} else {
+				logger.debug("File gia' rimosso. Procedo alla rimozione del record");
+			}
+			logger.debug("Rimozione record");
+			regDocumentRepository.delete(regDocument);
+			logger.debug("Record rimosso");
+			
+			try {
+				utils.deleteDir(cloudFile.getParentFile());
+			} catch (Exception e) {
+				logger.warn("ERRORE: Problemi nella rimozione della directory", e);
+			}
+		}
+	}
+	
+	public void cleanEmptyStorageFolder() {
+		String baseStoragePath = appConfig.getRepositoryBaseStoragePath();
+		logger.debug("Avvio esplorazione ricorsiva directory vuote da eliminare partendo da {}", baseStoragePath);
+		try {
+			utils.deleteEmptyDirectoriesRecursive(new File(baseStoragePath));
+		} catch (IOException e) {
+			logger.error("Errore nell'esplorazione delle sotto directory", e);
+		}
+	}
+}
diff --git a/dg1cloud-core/src/main/java/it/digione/dg1cloud/service/CloudService.java b/dg1cloud-core/src/main/java/it/digione/dg1cloud/service/CloudService.java
new file mode 100644
index 0000000..2175d3b
--- /dev/null
+++ b/dg1cloud-core/src/main/java/it/digione/dg1cloud/service/CloudService.java
@@ -0,0 +1,332 @@
+package it.digione.dg1cloud.service;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+import java.security.NoSuchAlgorithmException;
+import java.time.LocalDate;
+import java.time.ZoneId;
+
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+
+import it.digione.dg1cloud.config.AppConfig;
+import it.digione.dg1cloud.model.RegDocument;
+import it.digione.dg1cloud.pojo.UploadedFileDescriptor;
+import it.digione.dg1cloud.pojo.UploadedFileDescriptorOk;
+import it.digione.dg1cloud.repository.RegDocumentRepository;
+
+@Service("cloudService")
+public class CloudService {
+
+	private static final Logger logger = LoggerFactory.getLogger(CloudService.class);
+	
+	@Autowired private AppConfig appConfig;
+	@Autowired private Utils utils;
+	@Autowired private RegDocumentRepository regDocumentRepository;
+	
+	public void scannAccountHomeDirs() throws JsonParseException, JsonMappingException, NoSuchAlgorithmException, IOException {
+		
+		String repositoryPath = appConfig.getRepositoryBaseUploadPath();
+		File basePath = new File(repositoryPath);
+		
+		if ( basePath.exists() == false || basePath.isDirectory() == false )
+			throw new RuntimeException("La directory '" + basePath.getAbsolutePath() + "' non esiste oppure non e' una directory");
+		
+		for ( File folder : basePath.listFiles(File::isDirectory)) {
+			for ( File descriptor : folder.listFiles(
+				(dir, name) -> {
+					return name.toLowerCase().endsWith(".dg1cloud");
+				}))
+			{
+				boolean checkFile = false;
+				try {
+					checkFile = checkFile(descriptor.getAbsolutePath());
+				} catch (Exception e ) {
+					logger.error("Errore durante la fase di verifica del file", e);
+					writeKoFile(descriptor.getAbsolutePath(), "Errore durante la fase di verifica del file\n" + e.getMessage());
+					continue;
+				}
+				
+				if ( checkFile == true ) {
+					logger.debug("Controllo file descrittore completato con successo");
+					try {
+						storeFile(descriptor.getAbsolutePath());
+					} catch (Exception e) {
+						writeKoFile(descriptor.getAbsolutePath(), "Errore duranto la memorizzazione del file nello store\n" + e.getMessage());
+					}
+				} else {
+					logger.debug("Il file non ha passato le verifiche");
+				}
+			}
+		}
+	}
+	
+	public boolean checkFile(String cloudFileDescriptorPath) throws IOException, NoSuchAlgorithmException {
+		logger.debug("Controllo il file {}", cloudFileDescriptorPath);
+		
+		TypeReference<UploadedFileDescriptor> typeReference = new TypeReference<UploadedFileDescriptor>() {};
+		File cloudFileDescriptor = new File(cloudFileDescriptorPath);
+		
+		String koMessage = null;
+		
+		if ( cloudFileDescriptor.exists() == false ) {
+			koMessage = "Il file descrittore inviato '" + cloudFileDescriptor + "' non esiste";
+			writeKoFile(cloudFileDescriptorPath, koMessage);
+			return false;
+		}
+		
+		if ( cloudFileDescriptor.isFile() == false ) {
+			koMessage = "Il file descrittore inviato '" + cloudFileDescriptor + "' non e' di tipo file";
+			writeKoFile(cloudFileDescriptorPath, koMessage);
+			return false;
+		}
+		
+		InputStream is = new FileInputStream(cloudFileDescriptor);
+		
+		ObjectMapper mapper = new ObjectMapper();
+		
+		UploadedFileDescriptor uploadedFileDescriptor;
+		try {
+			uploadedFileDescriptor = mapper.readValue(is, typeReference);
+		} catch (IOException e) {
+			koMessage = "Il file descrittore non conforme:\n" + e.getMessage();
+			writeKoFile(cloudFileDescriptorPath, koMessage);
+			return false;
+		}
+		
+		is.close();
+		
+		File uploadedFile = new File(cloudFileDescriptor.getParentFile(), uploadedFileDescriptor.getFileName());
+		if ( uploadedFile.exists() == false ) {
+			koMessage = "Il file inviato '" + uploadedFile + "' non esiste";
+			writeKoFile(cloudFileDescriptorPath, koMessage);
+			return false;
+		}
+		
+		if ( uploadedFile.isFile() == false ) {
+			koMessage = "Il file inviato '" + uploadedFile + "' non e' di tipo file";
+			writeKoFile(cloudFileDescriptorPath, koMessage);
+			return false;
+		}
+		
+		FileInputStream fis = new FileInputStream(uploadedFile);
+		String hash = DigestUtils.sha256Hex(fis);
+		fis.close();
+		
+		if ( hash.equalsIgnoreCase(uploadedFileDescriptor.getSha256()) == false ) {
+			koMessage = "L'hash del file inviato non corrisponde con l'hash dichiarato nel descrittore del file:\n\t" +
+					"hash file inviato: " + hash + "\n\t" +
+					"hash dichiarato nel descrittore: " + uploadedFileDescriptor.getSha256();
+			writeKoFile(cloudFileDescriptorPath, koMessage);
+			return false;
+		}
+		
+		return true;
+	}
+	
+	public void storeFile(String cloudFileDescriptorPath) {
+		logger.debug("Avvio processo di memorizzazione file nello store");
+		TypeReference<UploadedFileDescriptor> typeReference = new TypeReference<UploadedFileDescriptor>() {};
+		File cloudFileDescriptor = new File(cloudFileDescriptorPath);
+		
+		InputStream is;
+		try {
+			is = new FileInputStream(cloudFileDescriptor);
+		} catch (FileNotFoundException e) {
+			throw new RuntimeException("Errore apertura stream file descrittore", e);
+		}
+		
+		ObjectMapper mapper = new ObjectMapper();
+		
+		UploadedFileDescriptor uploadedFileDescriptor;
+		try {
+			uploadedFileDescriptor = mapper.readValue(is, typeReference);
+		} catch (IOException e) {
+			throw new RuntimeException("Errore caricamento classe dal json del descrittore", e);
+		}
+		
+		logger.debug("Controllo esistenza file sul db");
+		RegDocument regDocument = regDocumentRepository.findOneByHashAndName(uploadedFileDescriptor.getSha256(), uploadedFileDescriptor.getFileName());
+		
+		String userName = cloudFileDescriptor.getParentFile().getName();
+		
+		File uploadedFile = new File(getUploadedFilePath(cloudFileDescriptorPath));
+		
+		if ( regDocument == null ) {
+			
+			logger.debug("Creazione nuovo record per il documento da conservare");
+			regDocument = new RegDocument();
+			regDocument.setCreatedBy(userName);
+			regDocument.setModifiedBy(userName);
+			regDocument.setFileHash(uploadedFileDescriptor.getSha256());
+			regDocument.setFileName(uploadedFileDescriptor.getFileName());
+			regDocument.setFileSize(uploadedFile.length());
+			regDocument.setDueDate(uploadedFileDescriptor.getDueDate());
+			regDocument.setFilePath("");
+			
+			regDocumentRepository.save(regDocument);
+			
+		} else {
+			logger.debug("Trovato 1 record per il documento da memorizzare");
+		}
+		
+		try {
+			moveUploadedFileToStorage(uploadedFile.getAbsolutePath(), regDocument);
+		} catch (Exception e) {
+			try {
+				writeKoFile(cloudFileDescriptorPath, e.getMessage());
+			} finally {
+				logger.debug("Rimozione regDocument");
+				regDocumentRepository.delete(regDocument);
+			}
+		}
+		try {
+			createOkFile(cloudFileDescriptorPath, regDocument);
+		} catch (Exception e) {
+			try {
+				writeKoFile(cloudFileDescriptorPath, e.getMessage());
+			} finally {
+				logger.debug("Rimozione regDocument");
+				regDocumentRepository.delete(regDocument);
+			}
+		}
+	}
+	
+	private void moveUploadedFileToStorage( String source, RegDocument regDocument ) throws IOException {
+		logger.debug("Spostamento file nello storage");
+		
+		String sha256Descriptor = regDocument.getFileHash();
+		
+		File sourceFile = new File(source);
+		File destinationFile = new File(generateStoragePath(regDocument));
+		
+		if ( destinationFile.exists() == false ) {
+			logger.debug("Creazione alberatura directory: " + destinationFile.getParent());
+			FileUtils.forceMkdirParent(destinationFile);
+			FileUtils.copyFile(sourceFile, destinationFile);
+		} else {
+			logger.debug("Il file risulta gia' presente nello storage. Verifico l'integrita'");
+			FileInputStream fis = new FileInputStream(destinationFile);
+			String hash = DigestUtils.sha256Hex(fis);
+			fis.close();
+			if ( sha256Descriptor.equalsIgnoreCase(hash) == false ) {
+				throw new IllegalStateException("L'hash del file nello storage non corrisponde con l'hash dichiarato nel descrittore del file:\n\t" +
+					"hash file inviato: " + hash + "\n\t" +
+					"hash dichiarato nel descrittore: " + sha256Descriptor);
+			}
+		}
+		
+		regDocument.setFilePath(destinationFile.getAbsolutePath());
+		logger.debug("Salvo il path nel regDocument: {}", regDocument.getFilePath());
+		regDocumentRepository.save(regDocument);
+	}
+	
+	private void createOkFile( String cloudFileDescriptorPath, RegDocument regDocument ) throws IOException {
+		logger.debug("Creazione file di OK");
+		
+		File fileDescriptor = new File(cloudFileDescriptorPath);
+		File okFile = new File(fileDescriptor.getParentFile(), fileDescriptor.getName() + ".ok");
+		
+		ObjectMapper mapper = new ObjectMapper();
+		mapper.enable(SerializationFeature.INDENT_OUTPUT);
+		mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+		
+		UploadedFileDescriptorOk uploadedFileDescriptorOk = new UploadedFileDescriptorOk();
+		
+		uploadedFileDescriptorOk.setFileName(regDocument.getFileName());
+		
+		URL url = utils.generateUrl(regDocument);
+		
+		uploadedFileDescriptorOk.setUrl(url.toExternalForm());
+		
+		try {
+			String json = mapper.writeValueAsString(uploadedFileDescriptorOk);
+			logger.debug("Scrittura json di ok:\n{}", json);
+			FileUtils.writeStringToFile(okFile, json, StandardCharsets.UTF_8);
+		} catch (IOException e) {
+			throw new RuntimeException("Errore nella scrittura del file di OK", e);
+		}
+		
+		File cloudFile = new File( getUploadedFilePath(cloudFileDescriptorPath) );
+		if (cloudFile.exists() == true )
+			FileUtils.deleteQuietly(cloudFile);
+		
+		try {
+			FileUtils.forceDelete(fileDescriptor);
+		} catch (IOException e) {
+			throw new RuntimeException("Errore rimozione del file descrittore", e);
+		}
+	}
+	
+	public void writeKoFile( String cloudFileDescriptorPath, String errorMessage )  {
+		logger.debug("Si e' verificato il seguente errore nella verifica tramite {}: {}", cloudFileDescriptorPath, errorMessage);
+		
+		File fileDescriptor = new File(cloudFileDescriptorPath);
+		File koFile = new File(fileDescriptor.getParentFile(), fileDescriptor.getName() + ".ko");
+		
+		try {
+			FileUtils.writeStringToFile(koFile, errorMessage, StandardCharsets.UTF_8);
+		} catch (IOException e) {
+			throw new RuntimeException("Errore nella scrittura del file di KO", e);
+		}
+		
+		File cloudFile = new File( getUploadedFilePath(cloudFileDescriptorPath) );
+		if (cloudFile.exists() == true )
+			FileUtils.deleteQuietly(cloudFile);
+		
+		try {
+			FileUtils.forceDelete(fileDescriptor);
+		} catch (IOException e) {
+			throw new RuntimeException("Errore rimozione del file descrittore", e);
+		}
+	}
+	
+	public String getUploadedFilePath( String cloudFileDescriptorPath ) {
+		File fileDescriptor = new File(cloudFileDescriptorPath);
+		return fileDescriptor.getParentFile().getAbsolutePath() + File.separator + FilenameUtils.getBaseName(fileDescriptor.getName());
+	}
+	
+	private String generateStoragePath( RegDocument regDocument ) {
+		
+		if ( regDocument.getCreated() == null )
+			throw new IllegalStateException("La data di creazione del RegDocument non e' valorizzata");
+		
+		LocalDate localDate = regDocument.getCreated().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+		int year = localDate.getYear();
+		int month = localDate.getMonthValue();
+		int day = localDate.getDayOfMonth();
+		
+		StringBuffer sb = new StringBuffer();
+		sb.append(appConfig.getRepositoryBaseStoragePath());
+		sb.append(File.separator);
+		sb.append(regDocument.getCreatedBy());
+		sb.append(File.separator);
+		sb.append(year);
+		sb.append(File.separator);
+		sb.append(month);
+		sb.append(File.separator);
+		sb.append(day);
+		sb.append(File.separator);
+		sb.append(regDocument.getDocumentId());
+		sb.append(File.separator);
+		sb.append(regDocument.getFileName());
+		
+		return sb.toString();
+	}
+}
diff --git a/dg1cloud-core/src/main/java/it/digione/dg1cloud/service/Utils.java b/dg1cloud-core/src/main/java/it/digione/dg1cloud/service/Utils.java
new file mode 100644
index 0000000..ee38726
--- /dev/null
+++ b/dg1cloud-core/src/main/java/it/digione/dg1cloud/service/Utils.java
@@ -0,0 +1,52 @@
+package it.digione.dg1cloud.service;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.apache.commons.io.FileUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.util.UriBuilder;
+import org.springframework.web.util.UriComponentsBuilder;
+
+import it.digione.dg1cloud.config.AppConfig;
+import it.digione.dg1cloud.model.RegDocument;
+
+@Service("utils")
+public class Utils {
+	
+	@Autowired private AppConfig appConfig;
+	
+	private static final Logger logger = LoggerFactory.getLogger(CloudService.class);
+	
+	public URL generateUrl(RegDocument regDocument) throws MalformedURLException {
+		logger.debug("Genero l'url per il record file {} con id {}", regDocument.getFileName(), regDocument.getDocumentId());
+		UriBuilder uriBuilder = UriComponentsBuilder.fromUriString(appConfig.getExternalBaseUrl());
+		uriBuilder.path("/downloadFile");
+		uriBuilder.queryParam("fileName", regDocument.getFileName());
+		uriBuilder.queryParam("id", regDocument.getDocumentId());
+		return uriBuilder.build().toURL();
+	}
+	
+	public void deleteDir( File directory ) throws IOException {
+		logger.debug("Rimozione directory {}", directory.getAbsolutePath());
+		FileUtils.deleteDirectory(directory);
+	}
+	
+	public void deleteEmptyDirectoriesRecursive( File directory) throws IOException {
+		for (File subDirectory : directory.listFiles(File::isDirectory) ) {
+			logger.debug("Analizzo sottodirectory {}", subDirectory.getAbsolutePath());
+			deleteEmptyDirectoriesRecursive(subDirectory);
+		}
+		if ( directory.listFiles().length == 0 ) {
+			logger.debug("La directory {} e' vuota", directory.getAbsolutePath());
+			deleteDir(directory);
+		} else {
+			logger.debug("La directory {} non e' vuota", directory.getAbsolutePath());
+		}
+	}
+}
diff --git a/dg1cloud-core/src/main/resources/application.properties b/dg1cloud-core/src/main/resources/application.properties
new file mode 100644
index 0000000..af62d1d
--- /dev/null
+++ b/dg1cloud-core/src/main/resources/application.properties
@@ -0,0 +1,19 @@
+spring.datasource.url=jdbc:postgresql://localhost:5432/dg1cloud
+spring.datasource.username=postgres
+spring.datasource.password=passero
+spring.datasource.driver-class-name=org.postgresql.Driver
+spring.datasource.tomcat.initial-size=10
+spring.datasource.tomcat.max-wait=30000 
+spring.datasource.tomcat.max-active=25
+spring.datasource.tomcat.max-idle=20
+spring.datasource.tomcat.min-idle=10
+spring.datasource.tomcat.test-on-borrow=true
+spring.datasource.tomcat.test-while-idle=true
+spring.datasource.tomcat.validation-query=SELECT 1
+spring.datasource.type=com.zaxxer.hikari.HikariDataSource
+
+spring.jpa.open-in-view=true
+
+server.address=vannux.grupposistematica.it
+
+logging.level.it.digione.dg1cloud=DEBUG
\ No newline at end of file
diff --git a/dg1cloud-core/src/test/java/it/digione/cloud/Dg1cloudCoreApplicationTests.java b/dg1cloud-core/src/test/java/it/digione/cloud/Dg1cloudCoreApplicationTests.java
new file mode 100644
index 0000000..c7adb36
--- /dev/null
+++ b/dg1cloud-core/src/test/java/it/digione/cloud/Dg1cloudCoreApplicationTests.java
@@ -0,0 +1,22 @@
+package it.digione.cloud;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import it.digione.dg1cloud.app.Dg1cloudCoreApplication;
+import it.digione.dg1cloud.service.CleanerService;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = Dg1cloudCoreApplication.class)
+public class Dg1cloudCoreApplicationTests {
+
+	@Autowired CleanerService cleanerService;
+	@Test
+	public void contextLoads() {
+		cleanerService.cleanEmptyStorageFolder();
+	}
+
+}
diff --git a/dg1cloud-core/target/classes/META-INF/MANIFEST.MF b/dg1cloud-core/target/classes/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..7d3d475
--- /dev/null
+++ b/dg1cloud-core/target/classes/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Implementation-Title: dg1cloud-core
+Implementation-Version: 0.0.1-SNAPSHOT
+Built-By: lvannucci
+Implementation-Vendor-Id: it.digione.cloud
+Build-Jdk: 1.8.0_131
+Implementation-URL: https://projects.spring.io/spring-boot/#/spring-bo
+ ot-starter-parent/dg1cloud-core
+Created-By: Maven Integration for Eclipse
+
diff --git a/dg1cloud-core/target/classes/META-INF/maven/it.digione.cloud/dg1cloud-core/pom.properties b/dg1cloud-core/target/classes/META-INF/maven/it.digione.cloud/dg1cloud-core/pom.properties
new file mode 100644
index 0000000..3ea6df0
--- /dev/null
+++ b/dg1cloud-core/target/classes/META-INF/maven/it.digione.cloud/dg1cloud-core/pom.properties
@@ -0,0 +1,7 @@
+#Generated by Maven Integration for Eclipse
+#Wed Aug 01 09:46:22 CEST 2018
+version=0.0.1-SNAPSHOT
+groupId=it.digione.cloud
+m2e.projectName=dg1cloud-core
+m2e.projectLocation=E\:\\users\\lvannucci\\GIT_Projects\\dg1cloud\\dg1cloud-core
+artifactId=dg1cloud-core
diff --git a/dg1cloud-core/target/classes/META-INF/maven/it.digione.cloud/dg1cloud-core/pom.xml b/dg1cloud-core/target/classes/META-INF/maven/it.digione.cloud/dg1cloud-core/pom.xml
new file mode 100644
index 0000000..1fcf8c8
--- /dev/null
+++ b/dg1cloud-core/target/classes/META-INF/maven/it.digione.cloud/dg1cloud-core/pom.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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">
+	<modelVersion>4.0.0</modelVersion>
+
+	<groupId>it.digione.cloud</groupId>
+	<artifactId>dg1cloud-core</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+	<packaging>jar</packaging>
+
+	<name>dg1cloud-core</name>
+	<description>Servizio cloud per ricezione file</description>
+
+	<parent>
+		<groupId>org.springframework.boot</groupId>
+		<artifactId>spring-boot-starter-parent</artifactId>
+		<version>2.0.3.RELEASE</version>
+		<relativePath/> <!-- lookup parent from repository -->
+	</parent>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+		<java.version>1.8</java.version>
+	</properties>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-data-jpa</artifactId>
+		</dependency>
+		
+		<dependency>
+			<groupId>org.flywaydb</groupId>
+			<artifactId>flyway-core</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-test</artifactId>
+			<scope>test</scope>
+		</dependency>
+		
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-web</artifactId>
+		</dependency>
+		
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-tomcat</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		
+		<dependency>
+			<groupId>org.postgresql</groupId>
+			<artifactId>postgresql</artifactId>
+		</dependency>
+		
+		<dependency>
+			<groupId>org.eclipse.persistence</groupId>
+			<artifactId>eclipselink</artifactId>
+			<version>2.5.0</version>
+		</dependency>
+		
+		<dependency>
+			<groupId>com.fasterxml.jackson.core</groupId>
+			<artifactId>jackson-databind</artifactId>
+		</dependency>
+		
+		<dependency>
+			<groupId>commons-io</groupId>
+			<artifactId>commons-io</artifactId>
+			<version>2.6</version>
+		</dependency>
+		
+		<dependency>
+			<groupId>commons-codec</groupId>
+			<artifactId>commons-codec</artifactId>
+			</dependency>
+		
+	</dependencies>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.springframework.boot</groupId>
+				<artifactId>spring-boot-maven-plugin</artifactId>
+			</plugin>
+		</plugins>
+	</build>
+
+
+</project>
diff --git a/dg1cloud-core/target/classes/META-INF/persistence.xml b/dg1cloud-core/target/classes/META-INF/persistence.xml
new file mode 100644
index 0000000..3ea7c16
--- /dev/null
+++ b/dg1cloud-core/target/classes/META-INF/persistence.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
+	<persistence-unit name="dg1cloud-core">
+		<class>it.digione.dg1cloud.model.RegDocument</class>
+		<properties>
+			<property name="eclipselink.jdbc.batch-writing" value="JDBC"/>
+		</properties>
+	</persistence-unit>
+</persistence>
diff --git a/dg1cloud-core/target/classes/application.properties b/dg1cloud-core/target/classes/application.properties
new file mode 100644
index 0000000..af62d1d
--- /dev/null
+++ b/dg1cloud-core/target/classes/application.properties
@@ -0,0 +1,19 @@
+spring.datasource.url=jdbc:postgresql://localhost:5432/dg1cloud
+spring.datasource.username=postgres
+spring.datasource.password=passero
+spring.datasource.driver-class-name=org.postgresql.Driver
+spring.datasource.tomcat.initial-size=10
+spring.datasource.tomcat.max-wait=30000 
+spring.datasource.tomcat.max-active=25
+spring.datasource.tomcat.max-idle=20
+spring.datasource.tomcat.min-idle=10
+spring.datasource.tomcat.test-on-borrow=true
+spring.datasource.tomcat.test-while-idle=true
+spring.datasource.tomcat.validation-query=SELECT 1
+spring.datasource.type=com.zaxxer.hikari.HikariDataSource
+
+spring.jpa.open-in-view=true
+
+server.address=vannux.grupposistematica.it
+
+logging.level.it.digione.dg1cloud=DEBUG
\ No newline at end of file
diff --git a/dg1cloud-core/target/classes/db/migration/V0.1__DG1CLOUD.sql b/dg1cloud-core/target/classes/db/migration/V0.1__DG1CLOUD.sql
new file mode 100644
index 0000000..aab3b34
--- /dev/null
+++ b/dg1cloud-core/target/classes/db/migration/V0.1__DG1CLOUD.sql
@@ -0,0 +1,27 @@
+-- Table: public.reg_document
+CREATE TABLE public.reg_document
+(
+    document_id bigint NOT NULL,
+    created timestamp without time zone NOT NULL DEFAULT now(),
+    createdby character varying(255) NOT NULL,
+    modified timestamp without time zone NOT NULL DEFAULT now(),
+    modifiedby character varying(255) NOT NULL,
+    file_hash character varying(255),
+    file_name text NOT NULL,
+    file_path text NOT NULL,
+    file_size bigint,
+    due_date date,
+    CONSTRAINT reg_document_pkey PRIMARY KEY (document_id)
+)
+WITH (
+    OIDS = FALSE
+);
+
+CREATE SEQUENCE public.reg_document_seq
+    INCREMENT 1
+    START 1
+    MINVALUE 1
+    MAXVALUE 9223372036854775807
+    CACHE 1;
+    
+    
diff --git a/dg1cloud-core/target/classes/it/digione/dg1cloud/app/Dg1cloudCoreApplication.class b/dg1cloud-core/target/classes/it/digione/dg1cloud/app/Dg1cloudCoreApplication.class
new file mode 100644
index 0000000..87df6d0
--- /dev/null
+++ b/dg1cloud-core/target/classes/it/digione/dg1cloud/app/Dg1cloudCoreApplication.class
Binary files differ
diff --git a/dg1cloud-core/target/classes/it/digione/dg1cloud/config/AppConfig.class b/dg1cloud-core/target/classes/it/digione/dg1cloud/config/AppConfig.class
new file mode 100644
index 0000000..4d94807
--- /dev/null
+++ b/dg1cloud-core/target/classes/it/digione/dg1cloud/config/AppConfig.class
Binary files differ
diff --git a/dg1cloud-core/target/classes/it/digione/dg1cloud/config/dg1cloud.properties b/dg1cloud-core/target/classes/it/digione/dg1cloud/config/dg1cloud.properties
new file mode 100644
index 0000000..f74bf52
--- /dev/null
+++ b/dg1cloud-core/target/classes/it/digione/dg1cloud/config/dg1cloud.properties
@@ -0,0 +1,16 @@
+application.version=v0.0.1beta
+
+repository.base.upload.path=/etc/dg1cloud/repository/upload
+repository.base.storage.path=/etc/dg1cloud/repository/storage
+
+repository.scanner.job.fixed.delay=60000
+repository.scanner.job.initial.delay=1000
+
+repository.cleaner.job.fixed.delay=60000
+repository.cleaner.job.initial.delay=1000
+
+repository.dircleaner.job.cron=0 0 5 * * *
+
+server.servlet.context-path=/dg1cloud
+
+external.server.address.base.url=http://vannux.grupposistematica.it:8080/dg1cloud
\ No newline at end of file
diff --git a/dg1cloud-core/target/classes/it/digione/dg1cloud/controller/DownloadFileController.class b/dg1cloud-core/target/classes/it/digione/dg1cloud/controller/DownloadFileController.class
new file mode 100644
index 0000000..dc77b22
--- /dev/null
+++ b/dg1cloud-core/target/classes/it/digione/dg1cloud/controller/DownloadFileController.class
Binary files differ
diff --git a/dg1cloud-core/target/classes/it/digione/dg1cloud/model/RegDocument.class b/dg1cloud-core/target/classes/it/digione/dg1cloud/model/RegDocument.class
new file mode 100644
index 0000000..b6de2da
--- /dev/null
+++ b/dg1cloud-core/target/classes/it/digione/dg1cloud/model/RegDocument.class
Binary files differ
diff --git a/dg1cloud-core/target/classes/it/digione/dg1cloud/pojo/UploadedFileDescriptor.class b/dg1cloud-core/target/classes/it/digione/dg1cloud/pojo/UploadedFileDescriptor.class
new file mode 100644
index 0000000..c7d7c3b
--- /dev/null
+++ b/dg1cloud-core/target/classes/it/digione/dg1cloud/pojo/UploadedFileDescriptor.class
Binary files differ
diff --git a/dg1cloud-core/target/classes/it/digione/dg1cloud/pojo/UploadedFileDescriptorOk.class b/dg1cloud-core/target/classes/it/digione/dg1cloud/pojo/UploadedFileDescriptorOk.class
new file mode 100644
index 0000000..205cd5a
--- /dev/null
+++ b/dg1cloud-core/target/classes/it/digione/dg1cloud/pojo/UploadedFileDescriptorOk.class
Binary files differ
diff --git a/dg1cloud-core/target/classes/it/digione/dg1cloud/repository/RegDocumentRepository.class b/dg1cloud-core/target/classes/it/digione/dg1cloud/repository/RegDocumentRepository.class
new file mode 100644
index 0000000..12b8823
--- /dev/null
+++ b/dg1cloud-core/target/classes/it/digione/dg1cloud/repository/RegDocumentRepository.class
Binary files differ
diff --git a/dg1cloud-core/target/classes/it/digione/dg1cloud/scheduler/RepositoryJob.class b/dg1cloud-core/target/classes/it/digione/dg1cloud/scheduler/RepositoryJob.class
new file mode 100644
index 0000000..6c81a57
--- /dev/null
+++ b/dg1cloud-core/target/classes/it/digione/dg1cloud/scheduler/RepositoryJob.class
Binary files differ
diff --git a/dg1cloud-core/target/classes/it/digione/dg1cloud/service/CleanerService.class b/dg1cloud-core/target/classes/it/digione/dg1cloud/service/CleanerService.class
new file mode 100644
index 0000000..d0d74f4
--- /dev/null
+++ b/dg1cloud-core/target/classes/it/digione/dg1cloud/service/CleanerService.class
Binary files differ
diff --git a/dg1cloud-core/target/classes/it/digione/dg1cloud/service/CloudService$1.class b/dg1cloud-core/target/classes/it/digione/dg1cloud/service/CloudService$1.class
new file mode 100644
index 0000000..146cf3f
--- /dev/null
+++ b/dg1cloud-core/target/classes/it/digione/dg1cloud/service/CloudService$1.class
Binary files differ
diff --git a/dg1cloud-core/target/classes/it/digione/dg1cloud/service/CloudService$2.class b/dg1cloud-core/target/classes/it/digione/dg1cloud/service/CloudService$2.class
new file mode 100644
index 0000000..c20478f
--- /dev/null
+++ b/dg1cloud-core/target/classes/it/digione/dg1cloud/service/CloudService$2.class
Binary files differ
diff --git a/dg1cloud-core/target/classes/it/digione/dg1cloud/service/CloudService.class b/dg1cloud-core/target/classes/it/digione/dg1cloud/service/CloudService.class
new file mode 100644
index 0000000..37f1588
--- /dev/null
+++ b/dg1cloud-core/target/classes/it/digione/dg1cloud/service/CloudService.class
Binary files differ
diff --git a/dg1cloud-core/target/classes/it/digione/dg1cloud/service/Utils.class b/dg1cloud-core/target/classes/it/digione/dg1cloud/service/Utils.class
new file mode 100644
index 0000000..46e81a1
--- /dev/null
+++ b/dg1cloud-core/target/classes/it/digione/dg1cloud/service/Utils.class
Binary files differ
diff --git a/dg1cloud-core/target/test-classes/it/digione/cloud/Dg1cloudCoreApplicationTests.class b/dg1cloud-core/target/test-classes/it/digione/cloud/Dg1cloudCoreApplicationTests.class
new file mode 100644
index 0000000..ed288e4
--- /dev/null
+++ b/dg1cloud-core/target/test-classes/it/digione/cloud/Dg1cloudCoreApplicationTests.class
Binary files differ

--
Gitblit v1.6.2