Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 2a34f0e1

Přidáno uživatelem Václav Honzík před asi 3 roky(ů)

Merge after second iteration

Zobrazit rozdíly:

.gitignore
1
.idea
DB/db_script-v1.1.sql
1
CREATE SCHEMA IF NOT EXISTS aswi;
2

  
3
CREATE  TABLE aswi."catalog" ( 
4
	id                   uuid  NOT NULL  ,
5
	name                 varchar(100)  NOT NULL  ,
6
	certainty            integer    ,
7
	latitude             double precision    ,
8
	longitude            double precision    ,
9
	CONSTRAINT pk_katalog PRIMARY KEY ( id )
10
 );
11

  
12
CREATE  TABLE aswi.countries ( 
13
	name                 varchar(100)  NOT NULL  ,
14
	catalog_id           uuid  NOT NULL  ,
15
	CONSTRAINT pk_countries PRIMARY KEY ( name )
16
 );
17

  
18
CREATE  TABLE aswi.types ( 
19
	"type"               varchar(100)  NOT NULL  ,
20
	CONSTRAINT pk_types PRIMARY KEY ( "type" )
21
 );
22

  
23
CREATE  TABLE aswi.users ( 
24
	name                 varchar(100)    ,
25
	email                varchar(100)  NOT NULL  ,
26
	"password"           varchar(128)  NOT NULL  ,
27
	is_admin             bit DEFAULT 0   ,
28
	CONSTRAINT pk_users PRIMARY KEY ( email )
29
 );
30

  
31
CREATE  TABLE aswi.written_forms ( 
32
	form                 varchar(100)  NOT NULL  ,
33
	catalog_id           uuid  NOT NULL  ,
34
	CONSTRAINT pk_written_forms PRIMARY KEY ( form, catalog_id )
35
 );
36

  
37
CREATE  TABLE aswi.alternative_names ( 
38
	catalog_id           uuid  NOT NULL  ,
39
	name                 varchar(100)  NOT NULL  ,
40
	CONSTRAINT pk_alternative_names PRIMARY KEY ( catalog_id, name )
41
 );
42

  
43
CREATE  TABLE aswi.bibliography ( 
44
	"source"             varchar(150)  NOT NULL  ,
45
	catalog_id           uuid  NOT NULL  ,
46
	CONSTRAINT pk_bibliography PRIMARY KEY ( "source", catalog_id )
47
 );
48

  
49
CREATE  TABLE aswi.catalog_type ( 
50
	catalog_id           uuid  NOT NULL  ,
51
	"type"               uuid  NOT NULL  ,
52
	CONSTRAINT pk_catalog_type PRIMARY KEY ( catalog_id, "type" )
53
 );
54

  
55
ALTER TABLE aswi.alternative_names ADD CONSTRAINT fk_catalog FOREIGN KEY ( catalog_id ) REFERENCES aswi."catalog"( id ) ON DELETE CASCADE;
56

  
57
ALTER TABLE aswi.bibliography ADD CONSTRAINT fk_bibliography_catalog FOREIGN KEY ( catalog_id ) REFERENCES aswi."catalog"( id );
58

  
59
ALTER TABLE aswi.catalog_type ADD CONSTRAINT fk_catalog FOREIGN KEY ( catalog_id ) REFERENCES aswi."catalog"( id );
60

  
61
ALTER TABLE aswi.catalog_type ADD CONSTRAINT fk_type_id FOREIGN KEY (  ) REFERENCES aswi.types(  );
62

  
63
ALTER TABLE aswi.countries ADD CONSTRAINT fk_countries_catalog FOREIGN KEY ( catalog_id ) REFERENCES aswi."catalog"( id );
64

  
65
ALTER TABLE aswi.written_forms ADD CONSTRAINT fk_written_forms_catalog FOREIGN KEY ( catalog_id ) REFERENCES aswi."catalog"( id );
66

  
67
COMMENT ON TABLE aswi."catalog" IS 'Catalog with geografical terms';
68

  
69
COMMENT ON COLUMN aswi."catalog".name IS 'Name of the geografical term';
70

  
71
COMMENT ON COLUMN aswi."catalog".latitude IS 'Geografical latitude';
72

  
73
COMMENT ON COLUMN aswi."catalog".longitude IS 'Geografical longitude';
74

  
75
COMMENT ON TABLE aswi.users IS 'Table to store different application users';
76

  
77
COMMENT ON COLUMN aswi.users.is_admin IS 'Logical value if the user has admin privileges';
78

  
backend/.gitignore
1
HELP.md
2
target/
3
!.mvn/wrapper/maven-wrapper.jar
4
!**/src/main/**/target/
5
!**/src/test/**/target/
6

  
7
### STS ###
8
.apt_generated
9
.classpath
10
.factorypath
11
.project
12
.settings
13
.springBeans
14
.sts4-cache
15

  
16
### IntelliJ IDEA ###
17
.idea
18
*.iws
19
*.iml
20
*.ipr
21

  
22
### NetBeans ###
23
/nbproject/private/
24
/nbbuild/
25
/dist/
26
/nbdist/
27
/.nb-gradle/
28
build/
29
!**/src/main/**/build/
30
!**/src/test/**/build/
31

  
32
### VS Code ###
33
.vscode/
backend/HELP.md
1
# Read Me First
2
The following was discovered as part of building this project:
3

  
4
* The original package name 'cz.zcu.kiv.backend-api' is invalid and this project uses 'cz.zcu.kiv.backendapi' instead.
5

  
6
# Getting Started
7

  
8
### Reference Documentation
9
For further reference, please consider the following sections:
10

  
11
* [Official Apache Maven documentation](https://maven.apache.org/guides/index.html)
12
* [Spring Boot Maven Plugin Reference Guide](https://docs.spring.io/spring-boot/docs/2.6.4/maven-plugin/reference/html/)
13
* [Create an OCI image](https://docs.spring.io/spring-boot/docs/2.6.4/maven-plugin/reference/html/#build-image)
14
* [Spring Web](https://docs.spring.io/spring-boot/docs/2.6.4/reference/htmlsingle/#boot-features-developing-web-applications)
15

  
16
### Guides
17
The following guides illustrate how to use some features concretely:
18

  
19
* [Building a RESTful Web Service](https://spring.io/guides/gs/rest-service/)
20
* [Serving Web Content with Spring MVC](https://spring.io/guides/gs/serving-web-content/)
21
* [Building REST services with Spring](https://spring.io/guides/tutorials/bookmarks/)
22

  
backend/mvnw
1
#!/bin/sh
2
# ----------------------------------------------------------------------------
3
# Licensed to the Apache Software Foundation (ASF) under one
4
# or more contributor license agreements.  See the NOTICE file
5
# distributed with this work for additional information
6
# regarding copyright ownership.  The ASF licenses this file
7
# to you under the Apache License, Version 2.0 (the
8
# "License"); you may not use this file except in compliance
9
# with the License.  You may obtain a copy of the License at
10
#
11
#    https://www.apache.org/licenses/LICENSE-2.0
12
#
13
# Unless required by applicable law or agreed to in writing,
14
# software distributed under the License is distributed on an
15
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
# KIND, either express or implied.  See the License for the
17
# specific language governing permissions and limitations
18
# under the License.
19
# ----------------------------------------------------------------------------
20

  
21
# ----------------------------------------------------------------------------
22
# Maven Start Up Batch script
23
#
24
# Required ENV vars:
25
# ------------------
26
#   JAVA_HOME - location of a JDK home dir
27
#
28
# Optional ENV vars
29
# -----------------
30
#   M2_HOME - location of maven2's installed home dir
31
#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
32
#     e.g. to debug Maven itself, use
33
#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
34
#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
35
# ----------------------------------------------------------------------------
36

  
37
if [ -z "$MAVEN_SKIP_RC" ] ; then
38

  
39
  if [ -f /usr/local/etc/mavenrc ] ; then
40
    . /usr/local/etc/mavenrc
41
  fi
42

  
43
  if [ -f /etc/mavenrc ] ; then
44
    . /etc/mavenrc
45
  fi
46

  
47
  if [ -f "$HOME/.mavenrc" ] ; then
48
    . "$HOME/.mavenrc"
49
  fi
50

  
51
fi
52

  
53
# OS specific support.  $var _must_ be set to either true or false.
54
cygwin=false;
55
darwin=false;
56
mingw=false
57
case "`uname`" in
58
  CYGWIN*) cygwin=true ;;
59
  MINGW*) mingw=true;;
60
  Darwin*) darwin=true
61
    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
62
    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
63
    if [ -z "$JAVA_HOME" ]; then
64
      if [ -x "/usr/libexec/java_home" ]; then
65
        export JAVA_HOME="`/usr/libexec/java_home`"
66
      else
67
        export JAVA_HOME="/Library/Java/Home"
68
      fi
69
    fi
70
    ;;
71
esac
72

  
73
if [ -z "$JAVA_HOME" ] ; then
74
  if [ -r /etc/gentoo-release ] ; then
75
    JAVA_HOME=`java-config --jre-home`
76
  fi
77
fi
78

  
79
if [ -z "$M2_HOME" ] ; then
80
  ## resolve links - $0 may be a link to maven's home
81
  PRG="$0"
82

  
83
  # need this for relative symlinks
84
  while [ -h "$PRG" ] ; do
85
    ls=`ls -ld "$PRG"`
86
    link=`expr "$ls" : '.*-> \(.*\)$'`
87
    if expr "$link" : '/.*' > /dev/null; then
88
      PRG="$link"
89
    else
90
      PRG="`dirname "$PRG"`/$link"
91
    fi
92
  done
93

  
94
  saveddir=`pwd`
95

  
96
  M2_HOME=`dirname "$PRG"`/..
97

  
98
  # make it fully qualified
99
  M2_HOME=`cd "$M2_HOME" && pwd`
100

  
101
  cd "$saveddir"
102
  # echo Using m2 at $M2_HOME
103
fi
104

  
105
# For Cygwin, ensure paths are in UNIX format before anything is touched
106
if $cygwin ; then
107
  [ -n "$M2_HOME" ] &&
108
    M2_HOME=`cygpath --unix "$M2_HOME"`
109
  [ -n "$JAVA_HOME" ] &&
110
    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
111
  [ -n "$CLASSPATH" ] &&
112
    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
113
fi
114

  
115
# For Mingw, ensure paths are in UNIX format before anything is touched
116
if $mingw ; then
117
  [ -n "$M2_HOME" ] &&
118
    M2_HOME="`(cd "$M2_HOME"; pwd)`"
119
  [ -n "$JAVA_HOME" ] &&
120
    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
121
fi
122

  
123
if [ -z "$JAVA_HOME" ]; then
124
  javaExecutable="`which javac`"
125
  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
126
    # readlink(1) is not available as standard on Solaris 10.
127
    readLink=`which readlink`
128
    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
129
      if $darwin ; then
130
        javaHome="`dirname \"$javaExecutable\"`"
131
        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
132
      else
133
        javaExecutable="`readlink -f \"$javaExecutable\"`"
134
      fi
135
      javaHome="`dirname \"$javaExecutable\"`"
136
      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
137
      JAVA_HOME="$javaHome"
138
      export JAVA_HOME
139
    fi
140
  fi
141
fi
142

  
143
if [ -z "$JAVACMD" ] ; then
144
  if [ -n "$JAVA_HOME"  ] ; then
145
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
146
      # IBM's JDK on AIX uses strange locations for the executables
147
      JAVACMD="$JAVA_HOME/jre/sh/java"
148
    else
149
      JAVACMD="$JAVA_HOME/bin/java"
150
    fi
151
  else
152
    JAVACMD="`\\unset -f command; \\command -v java`"
153
  fi
154
fi
155

  
156
if [ ! -x "$JAVACMD" ] ; then
157
  echo "Error: JAVA_HOME is not defined correctly." >&2
158
  echo "  We cannot execute $JAVACMD" >&2
159
  exit 1
160
fi
161

  
162
if [ -z "$JAVA_HOME" ] ; then
163
  echo "Warning: JAVA_HOME environment variable is not set."
164
fi
165

  
166
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
167

  
168
# traverses directory structure from process work directory to filesystem root
169
# first directory with .mvn subdirectory is considered project base directory
170
find_maven_basedir() {
171

  
172
  if [ -z "$1" ]
173
  then
174
    echo "Path not specified to find_maven_basedir"
175
    return 1
176
  fi
177

  
178
  basedir="$1"
179
  wdir="$1"
180
  while [ "$wdir" != '/' ] ; do
181
    if [ -d "$wdir"/.mvn ] ; then
182
      basedir=$wdir
183
      break
184
    fi
185
    # workaround for JBEAP-8937 (on Solaris 10/Sparc)
186
    if [ -d "${wdir}" ]; then
187
      wdir=`cd "$wdir/.."; pwd`
188
    fi
189
    # end of workaround
190
  done
191
  echo "${basedir}"
192
}
193

  
194
# concatenates all lines of a file
195
concat_lines() {
196
  if [ -f "$1" ]; then
197
    echo "$(tr -s '\n' ' ' < "$1")"
198
  fi
199
}
200

  
201
BASE_DIR=`find_maven_basedir "$(pwd)"`
202
if [ -z "$BASE_DIR" ]; then
203
  exit 1;
204
fi
205

  
206
##########################################################################################
207
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
208
# This allows using the maven wrapper in projects that prohibit checking in binary data.
209
##########################################################################################
210
if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
211
    if [ "$MVNW_VERBOSE" = true ]; then
212
      echo "Found .mvn/wrapper/maven-wrapper.jar"
213
    fi
214
else
215
    if [ "$MVNW_VERBOSE" = true ]; then
216
      echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
217
    fi
218
    if [ -n "$MVNW_REPOURL" ]; then
219
      jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
220
    else
221
      jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
222
    fi
223
    while IFS="=" read key value; do
224
      case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
225
      esac
226
    done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
227
    if [ "$MVNW_VERBOSE" = true ]; then
228
      echo "Downloading from: $jarUrl"
229
    fi
230
    wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
231
    if $cygwin; then
232
      wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
233
    fi
234

  
235
    if command -v wget > /dev/null; then
236
        if [ "$MVNW_VERBOSE" = true ]; then
237
          echo "Found wget ... using wget"
238
        fi
239
        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
240
            wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
241
        else
242
            wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
243
        fi
244
    elif command -v curl > /dev/null; then
245
        if [ "$MVNW_VERBOSE" = true ]; then
246
          echo "Found curl ... using curl"
247
        fi
248
        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
249
            curl -o "$wrapperJarPath" "$jarUrl" -f
250
        else
251
            curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
252
        fi
253

  
254
    else
255
        if [ "$MVNW_VERBOSE" = true ]; then
256
          echo "Falling back to using Java to download"
257
        fi
258
        javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
259
        # For Cygwin, switch paths to Windows format before running javac
260
        if $cygwin; then
261
          javaClass=`cygpath --path --windows "$javaClass"`
262
        fi
263
        if [ -e "$javaClass" ]; then
264
            if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
265
                if [ "$MVNW_VERBOSE" = true ]; then
266
                  echo " - Compiling MavenWrapperDownloader.java ..."
267
                fi
268
                # Compiling the Java class
269
                ("$JAVA_HOME/bin/javac" "$javaClass")
270
            fi
271
            if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
272
                # Running the downloader
273
                if [ "$MVNW_VERBOSE" = true ]; then
274
                  echo " - Running MavenWrapperDownloader.java ..."
275
                fi
276
                ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
277
            fi
278
        fi
279
    fi
280
fi
281
##########################################################################################
282
# End of extension
283
##########################################################################################
284

  
285
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
286
if [ "$MVNW_VERBOSE" = true ]; then
287
  echo $MAVEN_PROJECTBASEDIR
288
fi
289
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
290

  
291
# For Cygwin, switch paths to Windows format before running java
292
if $cygwin; then
293
  [ -n "$M2_HOME" ] &&
294
    M2_HOME=`cygpath --path --windows "$M2_HOME"`
295
  [ -n "$JAVA_HOME" ] &&
296
    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
297
  [ -n "$CLASSPATH" ] &&
298
    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
299
  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
300
    MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
301
fi
302

  
303
# Provide a "standardized" way to retrieve the CLI args that will
304
# work with both Windows and non-Windows executions.
305
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
306
export MAVEN_CMD_LINE_ARGS
307

  
308
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
309

  
310
exec "$JAVACMD" \
311
  $MAVEN_OPTS \
312
  $MAVEN_DEBUG_OPTS \
313
  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
314
  "-Dmaven.home=${M2_HOME}" \
315
  "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
316
  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
backend/mvnw.cmd
1
@REM ----------------------------------------------------------------------------
2
@REM Licensed to the Apache Software Foundation (ASF) under one
3
@REM or more contributor license agreements.  See the NOTICE file
4
@REM distributed with this work for additional information
5
@REM regarding copyright ownership.  The ASF licenses this file
6
@REM to you under the Apache License, Version 2.0 (the
7
@REM "License"); you may not use this file except in compliance
8
@REM with the License.  You may obtain a copy of the License at
9
@REM
10
@REM    https://www.apache.org/licenses/LICENSE-2.0
11
@REM
12
@REM Unless required by applicable law or agreed to in writing,
13
@REM software distributed under the License is distributed on an
14
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
@REM KIND, either express or implied.  See the License for the
16
@REM specific language governing permissions and limitations
17
@REM under the License.
18
@REM ----------------------------------------------------------------------------
19

  
20
@REM ----------------------------------------------------------------------------
21
@REM Maven Start Up Batch script
22
@REM
23
@REM Required ENV vars:
24
@REM JAVA_HOME - location of a JDK home dir
25
@REM
26
@REM Optional ENV vars
27
@REM M2_HOME - location of maven2's installed home dir
28
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
29
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
30
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
31
@REM     e.g. to debug Maven itself, use
32
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
33
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
34
@REM ----------------------------------------------------------------------------
35

  
36
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
37
@echo off
38
@REM set title of command window
39
title %0
40
@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
41
@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
42

  
43
@REM set %HOME% to equivalent of $HOME
44
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
45

  
46
@REM Execute a user defined script before this one
47
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
48
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
49
if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
50
if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %*
51
:skipRcPre
52

  
53
@setlocal
54

  
55
set ERROR_CODE=0
56

  
57
@REM To isolate internal variables from possible post scripts, we use another setlocal
58
@setlocal
59

  
60
@REM ==== START VALIDATION ====
61
if not "%JAVA_HOME%" == "" goto OkJHome
62

  
63
echo.
64
echo Error: JAVA_HOME not found in your environment. >&2
65
echo Please set the JAVA_HOME variable in your environment to match the >&2
66
echo location of your Java installation. >&2
67
echo.
68
goto error
69

  
70
:OkJHome
71
if exist "%JAVA_HOME%\bin\java.exe" goto init
72

  
73
echo.
74
echo Error: JAVA_HOME is set to an invalid directory. >&2
75
echo JAVA_HOME = "%JAVA_HOME%" >&2
76
echo Please set the JAVA_HOME variable in your environment to match the >&2
77
echo location of your Java installation. >&2
78
echo.
79
goto error
80

  
81
@REM ==== END VALIDATION ====
82

  
83
:init
84

  
85
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
86
@REM Fallback to current working directory if not found.
87

  
88
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
89
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
90

  
91
set EXEC_DIR=%CD%
92
set WDIR=%EXEC_DIR%
93
:findBaseDir
94
IF EXIST "%WDIR%"\.mvn goto baseDirFound
95
cd ..
96
IF "%WDIR%"=="%CD%" goto baseDirNotFound
97
set WDIR=%CD%
98
goto findBaseDir
99

  
100
:baseDirFound
101
set MAVEN_PROJECTBASEDIR=%WDIR%
102
cd "%EXEC_DIR%"
103
goto endDetectBaseDir
104

  
105
:baseDirNotFound
106
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
107
cd "%EXEC_DIR%"
108

  
109
:endDetectBaseDir
110

  
111
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
112

  
113
@setlocal EnableExtensions EnableDelayedExpansion
114
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
115
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
116

  
117
:endReadAdditionalConfig
118

  
119
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
120
set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
121
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
122

  
123
set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
124

  
125
FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
126
    IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
127
)
128

  
129
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
130
@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
131
if exist %WRAPPER_JAR% (
132
    if "%MVNW_VERBOSE%" == "true" (
133
        echo Found %WRAPPER_JAR%
134
    )
135
) else (
136
    if not "%MVNW_REPOURL%" == "" (
137
        SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
138
    )
139
    if "%MVNW_VERBOSE%" == "true" (
140
        echo Couldn't find %WRAPPER_JAR%, downloading it ...
141
        echo Downloading from: %DOWNLOAD_URL%
142
    )
143

  
144
    powershell -Command "&{"^
145
		"$webclient = new-object System.Net.WebClient;"^
146
		"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
147
		"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
148
		"}"^
149
		"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
150
		"}"
151
    if "%MVNW_VERBOSE%" == "true" (
152
        echo Finished downloading %WRAPPER_JAR%
153
    )
154
)
155
@REM End of extension
156

  
157
@REM Provide a "standardized" way to retrieve the CLI args that will
158
@REM work with both Windows and non-Windows executions.
159
set MAVEN_CMD_LINE_ARGS=%*
160

  
161
%MAVEN_JAVA_EXE% ^
162
  %JVM_CONFIG_MAVEN_PROPS% ^
163
  %MAVEN_OPTS% ^
164
  %MAVEN_DEBUG_OPTS% ^
165
  -classpath %WRAPPER_JAR% ^
166
  "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
167
  %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
168
if ERRORLEVEL 1 goto error
169
goto end
170

  
171
:error
172
set ERROR_CODE=1
173

  
174
:end
175
@endlocal & set ERROR_CODE=%ERROR_CODE%
176

  
177
if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost
178
@REM check for post script, once with legacy .bat ending and once with .cmd ending
179
if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
180
if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd"
181
:skipRcPost
182

  
183
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
184
if "%MAVEN_BATCH_PAUSE%"=="on" pause
185

  
186
if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE%
187

  
188
cmd /C exit /B %ERROR_CODE%
backend/pom.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4
    <modelVersion>4.0.0</modelVersion>
5
    <parent>
6
        <groupId>org.springframework.boot</groupId>
7
        <artifactId>spring-boot-starter-parent</artifactId>
8
        <version>2.6.4</version>
9
        <relativePath/>
10
    </parent>
11
    <groupId>cz.zcu.kiv</groupId>
12
    <artifactId>backend-api</artifactId>
13
    <version>0.0.1-SNAPSHOT</version>
14
    <name>backend-api</name>
15
    <description>Backend API for Neo-assyrian web application</description>
16
    <properties>
17
        <java.version>11</java.version>
18
    </properties>
19
    <dependencies>
20
        <dependency>
21
            <groupId>org.springframework.boot</groupId>
22
            <artifactId>spring-boot-starter-web</artifactId>
23
        </dependency>
24

  
25
        <dependency>
26
            <groupId>org.projectlombok</groupId>
27
            <artifactId>lombok</artifactId>
28
            <optional>true</optional>
29
        </dependency>
30
        <dependency>
31
            <groupId>org.springframework.boot</groupId>
32
            <artifactId>spring-boot-starter-test</artifactId>
33
            <scope>test</scope>
34
        </dependency>
35

  
36

  
37
        <dependency>
38
            <groupId>org.postgresql</groupId>
39
            <artifactId>postgresql</artifactId>
40
            <scope>runtime</scope>
41
        </dependency>
42

  
43
        <dependency>
44
            <groupId>org.springframework.boot</groupId>
45
            <artifactId>spring-boot-starter-data-jpa</artifactId>
46
        </dependency>
47

  
48
        <dependency>
49
            <groupId>org.springframework.boot</groupId>
50
            <artifactId>spring-boot-starter-validation</artifactId>
51
        </dependency>
52

  
53
        <dependency>
54
            <groupId>org.springframework.boot</groupId>
55
            <artifactId>spring-boot-starter-security</artifactId>
56
        </dependency>
57

  
58
        <dependency>
59
            <groupId>org.springframework.security</groupId>
60
            <artifactId>spring-security-test</artifactId>
61
            <scope>test</scope>
62
        </dependency>
63

  
64
        <dependency>
65
            <groupId>org.apache.commons</groupId>
66
            <artifactId>commons-csv</artifactId>
67
            <version>1.9.0</version>
68
        </dependency>
69

  
70
        <dependency>
71
            <groupId>com.auth0</groupId>
72
            <artifactId>java-jwt</artifactId>
73
            <version>3.19.0</version>
74
        </dependency>
75

  
76
        <dependency>
77
            <groupId>com.google.guava</groupId>
78
            <artifactId>guava</artifactId>
79
            <version>31.1-jre</version>
80
        </dependency>
81

  
82
        <dependency>
83
            <groupId>org.springframework.boot</groupId>
84
            <artifactId>spring-boot-configuration-processor</artifactId>
85
            <version>2.4.2</version>
86
            <optional>true</optional>
87
        </dependency>
88

  
89
        <dependency>
90
            <groupId>org.springdoc</groupId>
91
            <artifactId>springdoc-openapi-ui</artifactId>
92
            <version>1.6.6</version>
93
        </dependency>
94
    </dependencies>
95

  
96
    <build>
97
        <plugins>
98
            <plugin>
99
                <groupId>org.springframework.boot</groupId>
100
                <artifactId>spring-boot-maven-plugin</artifactId>
101
                <configuration>
102
                    <excludes>
103
                        <exclude>
104
                            <groupId>org.projectlombok</groupId>
105
                            <artifactId>lombok</artifactId>
106
                        </exclude>
107
                    </excludes>
108
                </configuration>
109
            </plugin>
110
        </plugins>
111
    </build>
112

  
113
</project>
backend/src/main/java/cz/zcu/kiv/backendapi/BackendApiApplication.java
1
package cz.zcu.kiv.backendapi;
2

  
3
import java.util.logging.Logger;
4
import org.springframework.boot.SpringApplication;
5
import org.springframework.boot.autoconfigure.SpringBootApplication;
6

  
7
@SpringBootApplication
8
public class BackendApiApplication {
9

  
10
	// TODO replace with log4j?
11
	public static final Logger LOGGER = Logger.getLogger(BackendApiApplication.class.getName());
12

  
13
	public static void main(String[] args) {
14
		SpringApplication.run(BackendApiApplication.class, args);
15
		LOGGER.info("Swagger is running at: http://localhost:8080/swagger-ui.html");
16
	}
17

  
18
}
backend/src/main/java/cz/zcu/kiv/backendapi/StubController.java
1
package cz.zcu.kiv.backendapi;
2

  
3
import java.util.logging.Logger;
4
import org.springframework.web.bind.annotation.GetMapping;
5
import org.springframework.web.bind.annotation.RestController;
6

  
7
@RestController()
8
public class StubController {
9

  
10
    public static final Logger LOGGER = Logger.getLogger(StubController.class.getName());
11

  
12
    static {
13
        LOGGER.info("StubController initialized!");
14
    }
15

  
16
//    @GetMapping("/stub")
17
//    public StubDto getStubDto() {
18
//        return new StubDto("Hello API", true);
19
//    }
20
}
backend/src/main/java/cz/zcu/kiv/backendapi/StubDto.java
1
package cz.zcu.kiv.backendapi;
2

  
3
//
4
//import lombok.AllArgsConstructor;
5
//public record StubDto(String message, Boolean success) {}
backend/src/main/java/cz/zcu/kiv/backendapi/alternativename/AlternativeNameEntity.java
1
package cz.zcu.kiv.backendapi.alternativename;
2

  
3
import cz.zcu.kiv.backendapi.catalog.CatalogEntity;
4
import lombok.AllArgsConstructor;
5
import lombok.Data;
6
import lombok.NoArgsConstructor;
7

  
8
import javax.persistence.*;
9
import java.io.Serializable;
10

  
11
/**
12
 * Alternative name entity representing alternative name of geographic entry
13
 */
14
@Data
15
@NoArgsConstructor
16
@AllArgsConstructor
17
@Entity
18
@Table(name = "alternative_names")
19
@IdClass(AlternativeNameEntity.class)
20
public class AlternativeNameEntity implements Serializable {
21
    /**
22
     * Name, serves as ID
23
     */
24
    @Id
25
    private String name;
26

  
27
    /**
28
     * Catalog entity
29
     */
30
    @ManyToOne
31
    @JoinColumn(name = "catalog_id")
32
    @Id
33
    private CatalogEntity catalog;
34
}
backend/src/main/java/cz/zcu/kiv/backendapi/alternativename/AlternativeNameRepository.java
1
package cz.zcu.kiv.backendapi.alternativename;
2

  
3
import org.springframework.data.jpa.repository.JpaRepository;
4
import org.springframework.stereotype.Repository;
5
import org.springframework.transaction.annotation.Transactional;
6

  
7
/**
8
 * Alternative name repository
9
 */
10
@Repository
11
@Transactional(readOnly = true)
12
public interface AlternativeNameRepository extends JpaRepository<AlternativeNameEntity, AlternativeNameEntity> {
13
}
backend/src/main/java/cz/zcu/kiv/backendapi/alternativename/AlternativeNameServiceImpl.java
1
package cz.zcu.kiv.backendapi.alternativename;
2

  
3
import lombok.RequiredArgsConstructor;
4
import org.springframework.stereotype.Service;
5
import org.springframework.transaction.annotation.Transactional;
6

  
7
/**
8
 * Alternative name service implementation
9
 */
10
@Service
11
@Transactional
12
@RequiredArgsConstructor
13
public class AlternativeNameServiceImpl implements IAlternativeNameService {
14

  
15
    /**
16
     * Alternative name repository
17
     */
18
    private final AlternativeNameRepository alternativeNameRepository;
19
}
backend/src/main/java/cz/zcu/kiv/backendapi/alternativename/IAlternativeNameService.java
1
package cz.zcu.kiv.backendapi.alternativename;
2

  
3
/**
4
 * Alternative name service interface
5
 */
6
public interface IAlternativeNameService {
7
}
backend/src/main/java/cz/zcu/kiv/backendapi/bibliography/BibliographyEntity.java
1
package cz.zcu.kiv.backendapi.bibliography;
2

  
3
import cz.zcu.kiv.backendapi.catalog.CatalogEntity;
4
import lombok.AllArgsConstructor;
5
import lombok.Data;
6
import lombok.NoArgsConstructor;
7

  
8
import javax.persistence.*;
9
import java.io.Serializable;
10

  
11
/**
12
 * Bibliography entity representing bibliography
13
 */
14
@Data
15
@NoArgsConstructor
16
@AllArgsConstructor
17
@Entity
18
@Table(name = "bibliography")
19
@IdClass(BibliographyEntity.class)
20
public class BibliographyEntity implements Serializable {
21
    /**
22
     * Source, serves as ID
23
     */
24
    @Id
25
    private String source;
26

  
27
    @ManyToOne
28
    @JoinColumn(name = "catalog_id")
29
    private CatalogEntity catalog;
30
}
backend/src/main/java/cz/zcu/kiv/backendapi/bibliography/BibliographyRepository.java
1
package cz.zcu.kiv.backendapi.bibliography;
2

  
3
import org.springframework.data.jpa.repository.JpaRepository;
4
import org.springframework.stereotype.Repository;
5
import org.springframework.transaction.annotation.Transactional;
6

  
7
/**
8
 * Bibliography repository
9
 */
10
@Repository
11
@Transactional(readOnly = true)
12
public interface BibliographyRepository extends JpaRepository<BibliographyEntity, BibliographyEntity> {
13
}
backend/src/main/java/cz/zcu/kiv/backendapi/bibliography/BibliographyServiceImpl.java
1
package cz.zcu.kiv.backendapi.bibliography;
2

  
3
import lombok.RequiredArgsConstructor;
4
import org.springframework.stereotype.Service;
5
import org.springframework.transaction.annotation.Transactional;
6

  
7
/**
8
 * Bibliography service implementation
9
 */
10
@Service
11
@Transactional
12
@RequiredArgsConstructor
13
public class BibliographyServiceImpl implements IBibliographyService {
14
    /**
15
     * Bibliography repository
16
     */
17
    private final BibliographyRepository bibliographyRepository;
18
}
backend/src/main/java/cz/zcu/kiv/backendapi/bibliography/IBibliographyService.java
1
package cz.zcu.kiv.backendapi.bibliography;
2

  
3
/**
4
 * Bibliography service interface
5
 */
6
public interface IBibliographyService {
7
}
backend/src/main/java/cz/zcu/kiv/backendapi/catalog/CatalogController.java
1
package cz.zcu.kiv.backendapi.catalog;
2

  
3
import lombok.RequiredArgsConstructor;
4
import org.springframework.http.HttpStatus;
5
import org.springframework.http.ResponseEntity;
6
import org.springframework.web.bind.annotation.*;
7

  
8
import java.util.List;
9
import java.util.UUID;
10

  
11
/**
12
 * Controller for catalog
13
 */
14
@RestController
15
@RequiredArgsConstructor
16
@RequestMapping("/catalog")
17
public class CatalogController {
18

  
19
    /**
20
     * Catalog service
21
     */
22
    private final ICatalogService catalogService;
23

  
24
    @PostMapping("")
25
    public void addCatalogEntry(@RequestBody CatalogDto catalogDto) {
26
        catalogService.saveCatalogEntry(catalogDto);
27
    }
28

  
29
    /**
30
     * Returns catalog entries satisfying given filter
31
     *
32
     * @param name    name - optional
33
     * @param country country - optional
34
     * @param type    type - optional
35
     * @return list of catalog entries satisfying given filter
36
     */
37
    @GetMapping("")
38
    public ResponseEntity<List<CatalogDto>> getCatalog(@RequestParam(defaultValue = "") String name, @RequestParam(defaultValue = "") String country, @RequestParam(defaultValue = "") String type) {
39
        return new ResponseEntity<>(catalogService.getCatalog(name, country, type), HttpStatus.OK);
40
    }
41

  
42
    /**
43
     * Updates catalog entry with given ID
44
     *
45
     * @param id         ID
46
     * @param catalogDto catalog DTO
47
     */
48
    @PutMapping("/{id}")
49
    public void updateCatalogEntry(@PathVariable UUID id, @RequestBody CatalogDto catalogDto) {
50
        catalogService.updateCatalogEntry(id, catalogDto);
51
    }
52

  
53
    /**
54
     * Deletes catalog entry with given ID
55
     *
56
     * @param id ID
57
     */
58
    @DeleteMapping("/{id}")
59
    public void deleteCatalogEntry(@PathVariable UUID id) {
60
        catalogService.deleteCatalogEntry(id);
61
    }
62
}
backend/src/main/java/cz/zcu/kiv/backendapi/catalog/CatalogDto.java
1
package cz.zcu.kiv.backendapi.catalog;
2

  
3
import com.fasterxml.jackson.annotation.JsonProperty;
4
import lombok.AllArgsConstructor;
5
import lombok.Data;
6
import lombok.NoArgsConstructor;
7

  
8
import java.util.Collections;
9
import java.util.Set;
10
import java.util.UUID;
11

  
12
/**
13
 * Class representing catalog DTO
14
 */
15
@Data
16
@AllArgsConstructor
17
@NoArgsConstructor
18
public class CatalogDto {
19
    /**
20
     * Id
21
     */
22
    @JsonProperty(access = JsonProperty.Access.READ_ONLY)
23
    private UUID id;
24

  
25
    /**
26
     * Name of geographic entry
27
     */
28
    private String name;
29

  
30
    /**
31
     * Certainty
32
     */
33
    private int certainty;
34

  
35
    /**
36
     * Longitude
37
     */
38
    private double longitude;
39

  
40
    /**
41
     * Latitude
42
     */
43
    private double latitude;
44

  
45
    /**
46
     * Bibliography
47
     */
48
    private Set<String> bibliography = Collections.emptySet();
49

  
50
    /**
51
     * Countries
52
     */
53
    private Set<String> countries = Collections.emptySet();
54

  
55
    /**
56
     * Written forms
57
     */
58
    private Set<String> writtenForms = Collections.emptySet();
59

  
60
    /**
61
     * Alternative names
62
     */
63
    private Set<String> alternativeNames = Collections.emptySet();
64

  
65
    /**
66
     * Types
67
     */
68
    private Set<String> types = Collections.emptySet();
69

  
70
}
backend/src/main/java/cz/zcu/kiv/backendapi/catalog/CatalogEntity.java
1
package cz.zcu.kiv.backendapi.catalog;
2

  
3
import cz.zcu.kiv.backendapi.alternativename.AlternativeNameEntity;
4
import cz.zcu.kiv.backendapi.bibliography.BibliographyEntity;
5
import cz.zcu.kiv.backendapi.country.CountryEntity;
6
import cz.zcu.kiv.backendapi.type.TypeEntity;
7
import cz.zcu.kiv.backendapi.writtenform.WrittenFormEntity;
8
import lombok.Getter;
9
import lombok.NoArgsConstructor;
10
import lombok.Setter;
11
import org.hibernate.annotations.LazyCollection;
12
import org.hibernate.annotations.LazyCollectionOption;
13

  
14
import javax.persistence.*;
15
import java.util.*;
16
import java.util.regex.Matcher;
17
import java.util.regex.Pattern;
18
import java.util.stream.Collectors;
19

  
20
/**
21
 * Catalog entity representing catalog
22
 */
23
//@Data
24
@Getter
25
@Setter
26
@NoArgsConstructor
27
@Entity
28
@Table(name = "catalog")
29
public class CatalogEntity {
30
    private static final String INTEGER_PATTERN = "\\d+";
31
    private static final String DOUBLE_PATTERN = "(\\d+[.]\\d+)|(\\d+)";
32
    private static final String EMPTY_ENTRY = "–";
33
    /**
34
     * Catalog entry id
35
     */
36
    @Id
37
    @GeneratedValue
38
    private UUID id;
39

  
40
    /**
41
     * Name of geographic entry
42
     */
43
    private String name;
44

  
45
    /**
46
     * Certainty
47
     */
48
    private int certainty;
49

  
50
    /**
51
     * Longitude
52
     */
53
    private double longitude;
54

  
55
    /**
56
     * Latitude
57
     */
58
    private double latitude;
59

  
60
    /**
61
     * Bibliography
62
     */
63
    @OneToMany(mappedBy = "catalog", cascade = CascadeType.ALL)
64
    @LazyCollection(LazyCollectionOption.FALSE)
65
    private Set<BibliographyEntity> bibliography = Collections.emptySet();
66

  
67
    /**
68
     * Countries
69
     */
70
    @OneToMany(mappedBy = "catalog", cascade = CascadeType.ALL)
71
    @LazyCollection(LazyCollectionOption.FALSE)
72
    private Set<CountryEntity> countries = Collections.emptySet();
73

  
74
    /**
75
     * Written forms
76
     */
77
    @OneToMany(mappedBy = "catalog", cascade = CascadeType.ALL)
78
    @LazyCollection(LazyCollectionOption.FALSE)
79
    private Set<WrittenFormEntity> writtenForms = Collections.emptySet();
80

  
81
    /**
82
     * Alternative names
83
     */
84
    @OneToMany(mappedBy = "catalog", cascade = CascadeType.ALL)
85
    @LazyCollection(LazyCollectionOption.FALSE)
86
    private Set<AlternativeNameEntity> alternativeNames = Collections.emptySet();
87

  
88
    /**
89
     * Set of user roles - many-to-many relationship
90
     */
91
    @ManyToMany(fetch = FetchType.EAGER)
92
    @JoinTable(
93
            name = "catalog_type",
94
            joinColumns = {
95
                    @JoinColumn(name = "catalog_id", referencedColumnName = "id")
96
            },
97
            inverseJoinColumns = {
98
                    @JoinColumn(name = "type", referencedColumnName = "type")
99
            }
100
    )
101
    private Set<TypeEntity> types = Collections.emptySet();
102

  
103
    public CatalogEntity(final List<String> csvFields) {
104

  
105
        this.name = csvFields.get(1);
106
        List<String> stringList = processListField(csvFields.get(2));
107
        this.alternativeNames = stringList.stream().map(s->new AlternativeNameEntity(s, this)).collect(Collectors.toSet());
108

  
109
        this.certainty = processIntField(csvFields.get(3));
110
        this.latitude = processDoubleField(csvFields.get(4));
111
        this.longitude = processDoubleField(csvFields.get(5));
112

  
113
        stringList = processListField(csvFields.get(6));
114
        this.writtenForms = stringList.stream().map(s->new WrittenFormEntity(s, this)).collect(Collectors.toSet());
115

  
116
        stringList = processListField(csvFields.get(7));
117
        this.types = stringList.stream().map(TypeEntity::new).collect(Collectors.toSet());
118

  
119
        stringList = processListField(csvFields.get(8));
120
        this.countries = stringList.stream().map(s->new CountryEntity(s, this)).collect(Collectors.toSet());
121

  
122
        stringList = processListField(csvFields.get(10));
123
        this.bibliography = stringList.stream().map(s->new BibliographyEntity(s, this)).collect(Collectors.toSet());
124
    }
125

  
126
    private int processIntField(String field) {
127
        Matcher matcher = Pattern.compile(INTEGER_PATTERN).matcher(field);
128
        if (matcher.find()) {
129
            return Integer.parseInt(matcher.group());
130
        } else {
131
            return 0;
132
        }
133
    }
134

  
135
    private double processDoubleField(String field) {
136
        Matcher matcher = Pattern.compile(DOUBLE_PATTERN).matcher(field);
137
        if (matcher.find()) {
138
            return Double.parseDouble(matcher.group());
139
        } else {
140
            return 0.0;
141
        }
142
    }
143

  
144
    private List<String> processListField(String field) {
145
        if (field.isEmpty() || field.equals(EMPTY_ENTRY)) {
146
            return new ArrayList<>();
147
        }
148
        return Arrays.stream(field.split(",")).map(String::trim).filter(item -> !item.isEmpty()).collect(Collectors.toList());
149
    }
150
}
backend/src/main/java/cz/zcu/kiv/backendapi/catalog/CatalogRepository.java
1
package cz.zcu.kiv.backendapi.catalog;
2

  
3
import org.springframework.data.jpa.repository.JpaRepository;
4
import org.springframework.data.jpa.repository.Query;
5
import org.springframework.stereotype.Repository;
6
import org.springframework.transaction.annotation.Transactional;
7

  
8
import java.util.Set;
9
import java.util.UUID;
10

  
11
/**
12
 * Catalog repository
13
 */
14
@Repository
15
@Transactional(readOnly = true)
16
public interface CatalogRepository extends JpaRepository<CatalogEntity, UUID> {
17

  
18
    /**
19
     * Returns all catalog entries containing specific values
20
     *
21
     * @param name    name - optional
22
     * @param country country - optional
23
     * @param type    type - optional
24
     * @return set of catalog entries satisfying filter conditions
25
     */
26
    @Query("SELECT DISTINCT e FROM CatalogEntity e LEFT JOIN AlternativeNameEntity a ON e = a.catalog " +
27
            "LEFT JOIN CountryEntity c ON e = c.catalog " +
28
            "INNER JOIN e.types t " +
29
            "WHERE (?1 = '' OR e.name LIKE ?1 OR a.name LIKE ?1) " +
30
            "AND (?2 = '' OR c.name LIKE ?2) " +
31
            "AND (?3 = '' OR t.type LIKE ?3)")
32
    Set<CatalogEntity> filterCatalog(String name, String country, String type);
33
}
backend/src/main/java/cz/zcu/kiv/backendapi/catalog/CatalogServiceImpl.java
1
package cz.zcu.kiv.backendapi.catalog;
2

  
3
import cz.zcu.kiv.backendapi.alternativename.AlternativeNameEntity;
4
import cz.zcu.kiv.backendapi.bibliography.BibliographyEntity;
5
import cz.zcu.kiv.backendapi.country.CountryEntity;
6
import cz.zcu.kiv.backendapi.exception.ApiRequestException;
7
import cz.zcu.kiv.backendapi.type.TypeEntity;
8
import cz.zcu.kiv.backendapi.type.ITypeService;
9
import cz.zcu.kiv.backendapi.writtenform.WrittenFormEntity;
10
import lombok.RequiredArgsConstructor;
11
import lombok.extern.slf4j.Slf4j;
12
import org.springframework.http.HttpStatus;
13
import org.springframework.stereotype.Service;
14
import org.springframework.transaction.annotation.Transactional;
15

  
16
import java.util.List;
17
import java.util.Set;
18
import java.util.UUID;
19
import java.util.stream.Collectors;
20

  
21
/**
22
 * Catalog service implementation
23
 */
24
@Service
25
@Transactional
26
@RequiredArgsConstructor
27
@Slf4j
28
public class CatalogServiceImpl implements ICatalogService {
29
    /**
30
     * Message for exception when catalog entry is not found by id
31
     */
32
    private static final String CATALOG_ENTRY_NOT_FOUND = "Catalog entry not found";
33
    /**
34
     * Catalog repository
35
     */
36
    private final CatalogRepository catalogRepository;
37

  
38
    /**
39
     * Type service
40
     */
41
    private final ITypeService typeService;
42

  
43
    @Override
44
    public void saveCatalog(List<CatalogEntity> catalogEntities) {
45
        log.info("Saving catalog");
46
        catalogEntities.forEach(this::saveCatalogEntity);
47
    }
48

  
49
    @Override
50
    public void saveCatalogEntry(CatalogDto catalogDto) {
51
        log.info("Saving catalog entry");
52
        CatalogEntity catalogEntity = new CatalogEntity();
53
        convertDtoToEntity(catalogDto, catalogEntity);
54
        saveCatalogEntity(catalogEntity);
55
    }
56

  
57
    @Override
58
    public void updateCatalogEntry(UUID id, CatalogDto catalogDto) {
59
        CatalogEntity catalogEntity = catalogRepository.findById(id).orElseThrow(() -> {
60
            log.error(CATALOG_ENTRY_NOT_FOUND);
61
            throw new ApiRequestException(CATALOG_ENTRY_NOT_FOUND, HttpStatus.NOT_FOUND);
62
        });
63
        convertDtoToEntity(catalogDto, catalogEntity);
64
        saveCatalogEntity(catalogEntity);
65
        log.info("Catalog entry updated");
66
    }
67

  
68
    @Override
69
    public void deleteCatalogEntry(UUID id) {
70
        CatalogEntity catalogEntity = catalogRepository.findById(id).orElseThrow(() -> {
71
            log.error(CATALOG_ENTRY_NOT_FOUND);
72
            throw new ApiRequestException(CATALOG_ENTRY_NOT_FOUND, HttpStatus.NOT_FOUND);
73
        });
74
        catalogRepository.delete(catalogEntity);
75
        log.info("Catalog entry deleted");
76
    }
77

  
78
    @Override
79
    public List<CatalogDto> getCatalog(String name, String country, String type) {
80
        log.info("Retrieving catalog");
81
        Set<CatalogEntity> entities = catalogRepository.filterCatalog(name, country, type);
82
        return entities.stream().map(this::convertEntityToDto).collect(Collectors.toList());
83
    }
84

  
85
    /**
86
     * Saves catalog entity to database
87
     *
88
     * @param catalogEntity catalog entity
89
     */
90
    private void saveCatalogEntity(CatalogEntity catalogEntity) {
91
        for (TypeEntity type : catalogEntity.getTypes()) {
92
            if (typeService.getTypeByName(type.getType()).isEmpty()) {
93
                typeService.saveType(type);
94
            }
95
        }
96
        catalogRepository.save(catalogEntity);
97
    }
98

  
99
    /**
100
     * Converts catalog DTO to catalog entity
101
     *
102
     * @param catalogDto    catalog DTO
103
     * @param catalogEntity catalog entity
... Rozdílový soubor je zkrácen, protože jeho délka přesahuje max. limit.

Také k dispozici: Unified diff