Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
B
bspastoriza19-esi-solutions
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Breixo Senra Pastoriza
bspastoriza19-esi-solutions
Commits
4190697b
Commit
4190697b
authored
Oct 23, 2025
by
Breixo Senra
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
First Commit
parent
45d4ccba
Changes
72
Show whitespace changes
Inline
Side-by-side
Showing
72 changed files
with
2673 additions
and
784 deletions
+2673
-784
xcs-sample-mysql.sql
additional-material/db/xcs-sample-mysql.sql
+29
-1
xcs-sample-test-mysql.sql
additional-material/db/xcs-sample-test-mysql.sql
+41
-6
pom.xml
domain/pom.xml
+20
-0
Administrator.java
...java/es/uvigo/esei/xcs/domain/entities/Administrator.java
+4
-22
Identifier.java
...in/java/es/uvigo/esei/xcs/domain/entities/Identifier.java
+64
-0
IdentifierType.java
...ava/es/uvigo/esei/xcs/domain/entities/IdentifierType.java
+12
-0
MonodoseVaccine.java
...va/es/uvigo/esei/xcs/domain/entities/MonodoseVaccine.java
+16
-0
MultidoseVaccine.java
...a/es/uvigo/esei/xcs/domain/entities/MultidoseVaccine.java
+31
-0
Owner.java
...rc/main/java/es/uvigo/esei/xcs/domain/entities/Owner.java
+4
-85
PeriodicType.java
.../java/es/uvigo/esei/xcs/domain/entities/PeriodicType.java
+5
-0
PeriodicVaccine.java
...va/es/uvigo/esei/xcs/domain/entities/PeriodicVaccine.java
+47
-0
Pet.java
.../src/main/java/es/uvigo/esei/xcs/domain/entities/Pet.java
+141
-111
User.java
...src/main/java/es/uvigo/esei/xcs/domain/entities/User.java
+5
-66
Vaccination.java
...n/java/es/uvigo/esei/xcs/domain/entities/Vaccination.java
+82
-0
Vaccine.java
.../main/java/es/uvigo/esei/xcs/domain/entities/Vaccine.java
+97
-0
Vet.java
.../src/main/java/es/uvigo/esei/xcs/domain/entities/Vet.java
+78
-0
AdministratorTest.java
.../es/uvigo/esei/xcs/domain/entities/AdministratorTest.java
+2
-1
EntitiesTestSuite.java
.../es/uvigo/esei/xcs/domain/entities/EntitiesTestSuite.java
+2
-1
MonodoseVaccineTest.java
...s/uvigo/esei/xcs/domain/entities/MonodoseVaccineTest.java
+28
-0
MultidoseVaccineTest.java
.../uvigo/esei/xcs/domain/entities/MultidoseVaccineTest.java
+35
-0
OwnerTest.java
...est/java/es/uvigo/esei/xcs/domain/entities/OwnerTest.java
+45
-205
PeriodicVaccineTest.java
...s/uvigo/esei/xcs/domain/entities/PeriodicVaccineTest.java
+42
-0
PetTest.java
.../test/java/es/uvigo/esei/xcs/domain/entities/PetTest.java
+72
-210
UserTest.java
...test/java/es/uvigo/esei/xcs/domain/entities/UserTest.java
+2
-2
VaccinationTest.java
...va/es/uvigo/esei/xcs/domain/entities/VaccinationTest.java
+57
-0
VaccineTest.java
...t/java/es/uvigo/esei/xcs/domain/entities/VaccineTest.java
+67
-0
VetTest.java
.../test/java/es/uvigo/esei/xcs/domain/entities/VetTest.java
+57
-0
OwnerManagedBean.java
...src/main/java/es/uvigo/esei/xcs/jsf/OwnerManagedBean.java
+2
-2
PetManagedBean.java
jsf/src/main/java/es/uvigo/esei/xcs/jsf/PetManagedBean.java
+2
-2
VaccineManagedBean.java
...c/main/java/es/uvigo/esei/xcs/jsf/VaccineManagedBean.java
+61
-0
VetManagedBean.java
jsf/src/main/java/es/uvigo/esei/xcs/jsf/VetManagedBean.java
+121
-0
vaccines.xhtml
jsf/src/main/webapp/vet/vaccines.xhtml
+94
-0
vets.xhtml
jsf/src/main/webapp/vet/vets.xhtml
+61
-0
JsfIntegrationTestSuite.java
...t/java/es/uvigo/esei/xcs/jsf/JsfIntegrationTestSuite.java
+2
-1
OwnerJsfTest.java
jsf/src/test/java/es/uvigo/esei/xcs/jsf/OwnerJsfTest.java
+2
-2
pom.xml
pom.xml
+5
-0
AdministratorResource.java
...in/java/es/uvigo/esei/xcs/rest/AdministratorResource.java
+28
-0
OwnerResource.java
rest/src/main/java/es/uvigo/esei/xcs/rest/OwnerResource.java
+35
-20
PetResource.java
rest/src/main/java/es/uvigo/esei/xcs/rest/PetResource.java
+7
-6
VaccineResource.java
...src/main/java/es/uvigo/esei/xcs/rest/VaccineResource.java
+63
-0
VetResource.java
rest/src/main/java/es/uvigo/esei/xcs/rest/VetResource.java
+241
-0
PetBasicProjection.java
...ava/es/uvigo/esei/xcs/rest/entity/PetBasicProjection.java
+21
-0
PetData.java
.../src/main/java/es/uvigo/esei/xcs/rest/entity/PetData.java
+1
-1
VaccinationCreationData.java
...s/uvigo/esei/xcs/rest/entity/VaccinationCreationData.java
+26
-0
VaccineCreationData.java
...va/es/uvigo/esei/xcs/rest/entity/VaccineCreationData.java
+43
-0
VaccineEditionData.java
...ava/es/uvigo/esei/xcs/rest/entity/VaccineEditionData.java
+26
-0
VetData.java
.../src/main/java/es/uvigo/esei/xcs/rest/entity/VetData.java
+34
-0
OwnerResourceRestTest.java
...st/java/es/uvigo/esei/xcs/rest/OwnerResourceRestTest.java
+2
-1
OwnerResourceUnitTest.java
...st/java/es/uvigo/esei/xcs/rest/OwnerResourceUnitTest.java
+2
-1
ResourceIntegrationTestSuite.java
.../es/uvigo/esei/xcs/rest/ResourceIntegrationTestSuite.java
+2
-1
ResourceUnitTestSuite.java
...st/java/es/uvigo/esei/xcs/rest/ResourceUnitTestSuite.java
+2
-1
AdministratorService.java
.../java/es/uvigo/esei/xcs/service/AdministratorService.java
+59
-0
CounterService.java
...c/main/java/es/uvigo/esei/xcs/service/CounterService.java
+52
-0
EmailService.java
...src/main/java/es/uvigo/esei/xcs/service/EmailService.java
+32
-0
IdentifierService.java
...ain/java/es/uvigo/esei/xcs/service/IdentifierService.java
+27
-0
OwnerService.java
...src/main/java/es/uvigo/esei/xcs/service/OwnerService.java
+69
-7
PetService.java
...e/src/main/java/es/uvigo/esei/xcs/service/PetService.java
+84
-9
UserService.java
.../src/main/java/es/uvigo/esei/xcs/service/UserService.java
+35
-1
VaccinationService.java
...in/java/es/uvigo/esei/xcs/service/VaccinationService.java
+77
-0
VaccineService.java
...c/main/java/es/uvigo/esei/xcs/service/VaccineService.java
+116
-0
VetService.java
...e/src/main/java/es/uvigo/esei/xcs/service/VetService.java
+126
-0
persistence.xml
service/src/main/resources/META-INF/persistence.xml
+9
-1
OwnerServiceIllegalAccessIntegrationTest.java
...xcs/service/OwnerServiceIllegalAccessIntegrationTest.java
+2
-2
OwnerServiceIntegrationTest.java
...s/uvigo/esei/xcs/service/OwnerServiceIntegrationTest.java
+2
-2
PetServiceIllegalAccessIntegrationTest.java
...i/xcs/service/PetServiceIllegalAccessIntegrationTest.java
+2
-2
PetServiceIntegrationTest.java
.../es/uvigo/esei/xcs/service/PetServiceIntegrationTest.java
+2
-2
ServiceIntegrationTestSuite.java
...s/uvigo/esei/xcs/service/ServiceIntegrationTestSuite.java
+2
-2
UserServiceIllegalAccessIntegrationTest.java
.../xcs/service/UserServiceIllegalAccessIntegrationTest.java
+2
-1
UserServiceIntegrationTest.java
...es/uvigo/esei/xcs/service/UserServiceIntegrationTest.java
+2
-2
IsEqualToEntity.java
...va/es/uvigo/esei/xcs/domain/entities/IsEqualToEntity.java
+1
-1
OwnersDataset.java
...java/es/uvigo/esei/xcs/domain/entities/OwnersDataset.java
+2
-2
UsersDataset.java
.../java/es/uvigo/esei/xcs/domain/entities/UsersDataset.java
+2
-2
No files found.
additional-material/db/xcs-sample-mysql.sql
View file @
4190697b
...
...
@@ -23,11 +23,39 @@ CREATE TABLE `Pet` (
`birth`
datetime
NOT
NULL
,
`name`
varchar
(
100
)
NOT
NULL
,
`owner`
varchar
(
100
)
NOT
NULL
,
`vet`
varchar
(
100
)
NOT
NULL
,
PRIMARY
KEY
(
`id`
),
KEY
`FK_Pet_Owner`
(
`owner`
),
KEY
`FK_Pet_Vet`
(
`vet`
),
CONSTRAINT
`FK_Pet_Owner_login`
FOREIGN
KEY
(
`owner`
)
REFERENCES
`User`
(
`login`
)
CONSTRAINT
`FK_Pet_Vet_login`
FOREIGN
KEY
(
`vet`
)
REFERENCES
`User`
(
`login`
)
CONSTRAINT
`FK_Pet_Vaccination_id`
FOREIGN
KEY
(
`vaccination`
)
REFERENCES
`Vaccination`
(
`id`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
;
--
-- Table structure for table `Pet`
--
CREATE
TABLE
`Vaccine`
(
`id`
int
(
11
)
NOT
NULL
AUTO_INCREMENT
,
`name`
varchar
(
100
)
NOT
NULL
,
`owner`
varchar
(
100
)
NOT
NULL
,
PRIMARY
KEY
(
`id`
),
KEY
`FK_Pet_Owner`
(
`owner`
),
CONSTRAINT
`FK_Pet_Owner_login`
FOREIGN
KEY
(
`owner`
)
REFERENCES
`User`
(
`login`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
;
--
-- Table structure for table `Vaccination`
--
CREATE
TABLE
`Vaccination`
(
`id`
int
(
11
)
NOT
NULL
AUTO_INCREMENT
,
`name`
varchar
(
100
)
NOT
NULL
,
`owner`
varchar
(
100
)
NOT
NULL
,
`date`
date
NOT
NULL
,
PRIMARY
KEY
(
`date`
),
KEY
`FK_Vaccination_Pet`
(
`pet`
),
KEY
`FK_Vaccination_Vaccine`
(
`owner`
),
CONSTRAINT
`FK_Vaccination_Pet_id`
FOREIGN
KEY
(
`petId`
)
REFERENCES
`Pet`
(
`id`
)
CONSTRAINT
`FK_Vaccination_Vaccine_id`
FOREIGN
KEY
(
`vaccineId`
)
REFERENCES
`Vaccine`
(
`id`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
;
--
-- User creation
--
...
...
additional-material/db/xcs-sample-test-mysql.sql
View file @
4190697b
CREATE
DATABASE
IF
NOT
EXISTS
`xcs
sample
test`
;
USE
`xcs
sample
test`
;
CREATE
DATABASE
IF
NOT
EXISTS
`xcs
_
test`
;
USE
`xcs
_
test`
;
-- Drop tables in reverse order of dependencies
DROP
TABLE
IF
EXISTS
`Vaccination`
;
DROP
TABLE
IF
EXISTS
`Vaccine`
;
DROP
TABLE
IF
EXISTS
`Pet`
;
DROP
TABLE
IF
EXISTS
`User`
;
...
...
@@ -23,14 +26,46 @@ CREATE TABLE `Pet` (
`birth`
datetime
NOT
NULL
,
`name`
varchar
(
100
)
NOT
NULL
,
`owner`
varchar
(
100
)
NOT
NULL
,
`vet`
varchar
(
100
)
NOT
NULL
,
PRIMARY
KEY
(
`id`
),
KEY
`FK_Pet_Owner`
(
`owner`
),
CONSTRAINT
`FK_Pet_Owner_login`
FOREIGN
KEY
(
`owner`
)
REFERENCES
`User`
(
`login`
)
KEY
`FK_Pet_Vet`
(
`vet`
),
CONSTRAINT
`FK_Pet_Owner_login`
FOREIGN
KEY
(
`owner`
)
REFERENCES
`User`
(
`login`
),
CONSTRAINT
`FK_Pet_Vet_login`
FOREIGN
KEY
(
`vet`
)
REFERENCES
`User`
(
`login`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
;
--
-- User creation
-- Table structure for table `Vaccine`
--
CREATE
TABLE
`Vaccine`
(
`id`
int
(
11
)
NOT
NULL
AUTO_INCREMENT
,
`name`
varchar
(
100
)
NOT
NULL
,
`owner`
varchar
(
100
)
NOT
NULL
,
PRIMARY
KEY
(
`id`
),
KEY
`FK_Vaccine_Owner`
(
`owner`
),
CONSTRAINT
`FK_Vaccine_Owner_login`
FOREIGN
KEY
(
`owner`
)
REFERENCES
`User`
(
`login`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
;
--
-- Table structure for table `Vaccination`
--
CREATE
TABLE
`Vaccination`
(
`id`
int
(
11
)
NOT
NULL
AUTO_INCREMENT
,
`name`
varchar
(
100
)
NOT
NULL
,
`owner`
varchar
(
100
)
NOT
NULL
,
`petId`
int
(
11
)
NOT
NULL
,
`vaccineId`
int
(
11
)
NOT
NULL
,
`date`
date
NOT
NULL
,
PRIMARY
KEY
(
`id`
),
KEY
`FK_Vaccination_Pet`
(
`petId`
),
KEY
`FK_Vaccination_Vaccine`
(
`vaccineId`
),
CONSTRAINT
`FK_Vaccination_Pet_id`
FOREIGN
KEY
(
`petId`
)
REFERENCES
`Pet`
(
`id`
),
CONSTRAINT
`FK_Vaccination_Vaccine_id`
FOREIGN
KEY
(
`vaccineId`
)
REFERENCES
`Vaccine`
(
`id`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
;
--
-- User creation for test DB
--
CREATE
USER
IF
NOT
EXISTS
xcs
@
localhost
IDENTIFIED
BY
'xcs'
;
GRANT
ALL
PRIVILEGES
ON
xcs
sampletest
.
*
TO
xcs
@
localhost
;
GRANT
ALL
PRIVILEGES
ON
xcs
_test
.
*
TO
xcs
@
localhost
;
FLUSH
PRIVILEGES
;
domain/pom.xml
View file @
4190697b
...
...
@@ -14,6 +14,26 @@
<description>
XCS Sample - Domain
</description>
<dependencies>
<!-- JACKSONNNNNNNN-->
<dependency>
<groupId>
com.fasterxml.jackson.core
</groupId>
<artifactId>
jackson-core
</artifactId>
<version>
2.15.2
</version>
</dependency>
<dependency>
<groupId>
com.fasterxml.jackson.core
</groupId>
<artifactId>
jackson-databind
</artifactId>
<version>
2.15.2
</version>
</dependency>
<dependency>
<groupId>
com.fasterxml.jackson.core
</groupId>
<artifactId>
jackson-annotations
</artifactId>
<version>
2.15.2
</version>
</dependency>
<!-- General -->
<dependency>
<groupId>
javax
</groupId>
...
...
domain/src/main/java/es/uvigo/esei/xcs/domain/entities/Administrator.java
View file @
4190697b
...
...
@@ -6,34 +6,16 @@ import javax.persistence.DiscriminatorValue;
import
javax.persistence.Entity
;
import
javax.xml.bind.annotation.XmlRootElement
;
/**
* An administrator of the application.
*
* @author Miguel Reboiro Jato
*/
@Entity
@DiscriminatorValue
(
"ADMIN"
)
@XmlRootElement
(
name
=
"admin"
,
namespace
=
"http://entities.domain.xcs.esei.uvigo.es"
)
public
class
Administrator
extends
User
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
// Required for JPA
Administrator
()
{}
public
Administrator
()
{}
/**
* Creates a new instance of {@code Administrator}.
*
* @param login the login that identifies the user. This parameter must be a
* non empty and non {@code null} string with a maximum length of 100 chars.
* @param password the raw password of the user. This parameter must be a
* non {@code null} string with a minimum length of 6 chars.
*
* @throws NullPointerException if a {@code null} value is passed as the
* value for any parameter.
* @throws IllegalArgumentException if value provided for any parameter is
* not valid according to its description.
*/
public
Administrator
(
String
login
,
String
password
)
{
Administrator
(
String
login
,
String
password
)
{
super
(
login
,
password
);
this
.
role
=
"ADMIN"
;
}
...
...
domain/src/main/java/es/uvigo/esei/xcs/domain/entities/Identifier.java
0 → 100644
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
domain
.
entities
;
import
javax.persistence.Column
;
import
javax.persistence.Entity
;
import
javax.persistence.EnumType
;
import
javax.persistence.Enumerated
;
import
javax.persistence.FetchType
;
import
javax.persistence.GeneratedValue
;
import
javax.persistence.GenerationType
;
import
javax.persistence.Id
;
import
javax.persistence.ManyToOne
;
import
javax.xml.bind.annotation.XmlTransient
;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
@Entity
public
class
Identifier
{
@Id
@Column
(
length
=
32
,
nullable
=
false
)
private
String
value
;
@ManyToOne
(
fetch
=
FetchType
.
LAZY
)
@JsonIgnore
private
Pet
pet
;
@Enumerated
(
EnumType
.
STRING
)
@Column
(
length
=
4
,
nullable
=
false
)
private
IdentifierType
type
;
public
Identifier
()
{
}
Identifier
(
Pet
pet
,
String
value
,
IdentifierType
type
)
{
this
.
pet
=
pet
;
this
.
value
=
value
;
this
.
type
=
type
;
}
public
Pet
getPet
()
{
return
this
.
pet
;
}
public
void
setPet
(
Pet
pet
)
{
if
(
this
.
pet
!=
null
)
{
this
.
pet
.
internalRemoveIdentifier
(
this
);
}
this
.
pet
=
pet
;
if
(
pet
!=
null
)
{
pet
.
internalAddIdentifier
(
this
);
}
}
public
String
getValue
()
{
return
this
.
value
;
}
public
IdentifierType
getType
()
{
return
this
.
type
;
}
}
domain/src/main/java/es/uvigo/esei/xcs/domain/entities/IdentifierType.java
0 → 100644
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
domain
.
entities
;
/**
* The type of identifier.
*
* @author Breixo Senra Pastoriza
*
*/
public
enum
IdentifierType
{
CHIP
,
TAG
}
domain/src/main/java/es/uvigo/esei/xcs/domain/entities/MonodoseVaccine.java
0 → 100644
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
domain
.
entities
;
import
javax.persistence.DiscriminatorValue
;
import
javax.persistence.Entity
;
@Entity
@DiscriminatorValue
(
"MONODOSE"
)
public
class
MonodoseVaccine
extends
Vaccine
{
private
static
final
long
serialVersionUID
=
1L
;
public
MonodoseVaccine
()
{}
public
MonodoseVaccine
(
String
name
)
{
super
(
name
);
}
}
domain/src/main/java/es/uvigo/esei/xcs/domain/entities/MultidoseVaccine.java
0 → 100644
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
domain
.
entities
;
import
javax.persistence.Column
;
import
javax.persistence.DiscriminatorValue
;
import
javax.persistence.Entity
;
@Entity
@DiscriminatorValue
(
"MULTIDOSE"
)
public
class
MultidoseVaccine
extends
Vaccine
{
private
static
final
long
serialVersionUID
=
1L
;
public
MultidoseVaccine
()
{}
public
MultidoseVaccine
(
String
name
,
Integer
doses
)
{
super
(
name
);
this
.
doses
=
doses
;
}
@Column
(
name
=
"doses"
,
nullable
=
true
)
private
Integer
doses
;
public
Integer
getDoses
()
{
return
this
.
doses
;
}
public
void
setDoses
(
Integer
doses
)
{
this
.
doses
=
doses
;
}
}
domain/src/main/java/es/uvigo/esei/xcs/domain/entities/Owner.java
View file @
4190697b
...
...
@@ -16,11 +16,6 @@ import javax.persistence.FetchType;
import
javax.persistence.OneToMany
;
import
javax.xml.bind.annotation.XmlRootElement
;
/**
* A pet owner.
*
* @author Miguel Reboiro-Jato
*/
@Entity
@DiscriminatorValue
(
"OWNER"
)
@XmlRootElement
(
name
=
"owner"
,
namespace
=
"http://entities.domain.xcs.esei.uvigo.es"
)
...
...
@@ -35,66 +30,24 @@ public class Owner extends User implements Serializable {
)
private
Set
<
Pet
>
pets
;
// Required for JPA
Owner
()
{}
/**
* Creates a new instance of {@code Owner} without pets.
*
* @param login the login that identifies the user. This parameter must be a
* non empty and non {@code null} string with a maximum length of 100 chars.
* @param password the raw password of the user. This parameter must be a
* non {@code null} string with a minimum length of 6 chars.
*
* @throws NullPointerException if a {@code null} value is passed as the
* value for any parameter.
* @throws IllegalArgumentException if value provided for any parameter is
* not valid according to its description.
*/
public
Owner
()
{}
public
Owner
(
String
login
,
String
password
)
{
super
(
login
,
password
);
this
.
role
=
"OWNER"
;
this
.
pets
=
new
HashSet
<>();
}
/**
* Creates a new instance of {@code Owner} with pets.
*
* @param login the login that identifies the user. This parameter must be a
* non empty and non {@code null} string with a maximum length of 100 chars.
* @param password the raw password of the user. This parameter must be a
* non {@code null} string with a minimum length of 4 chars.
* @param pets the pets that belong to this owner. The list of pets can be
* empty. {@code null} values are not supported.
*
* @throws NullPointerException if a {@code null} value is passed as the
* value for any parameter.
* @throws IllegalArgumentException if value provided for any parameter is
* not valid according to its description.
*/
public
Owner
(
String
login
,
String
password
,
Pet
...
pets
)
{
Owner
(
String
login
,
String
password
,
Pet
...
pets
)
{
this
(
login
,
password
);
stream
(
pets
).
forEach
(
this
::
addPet
);
}
/**
* Returns the pets that belong to this owner. The collection returned is
* unmodifiable and no order are guaranteed.
*
* @return the pets that belongs to this owner.
*/
public
Collection
<
Pet
>
getPets
()
{
return
unmodifiableCollection
(
pets
);
}
/**
* Adds a pet to this owner. The pet's owner will be set to this instance.
*
* @param pet the pet to add to this owner. {@code null} values not
* supported.
* @throws NullPointerException if the {@code pet} is {@code null}.
*/
public
void
addPet
(
Pet
pet
)
{
requireNonNull
(
pet
,
"pet can't be null"
);
...
...
@@ -103,16 +56,6 @@ public class Owner extends User implements Serializable {
}
}
/**
* Removes a pet from this owner. The pet's owner will be set to
* {@code null}.
*
* @param pet the pet to remove from this owner. {@code null} values not
* supported.
* @throws NullPointerException if the {@code pet} is {@code null}.
* @throws IllegalArgumentException if the {@code pet} does not belong to
* this owner.
*/
public
void
removePet
(
Pet
pet
)
{
requireNonNull
(
pet
,
"pet can't be null"
);
...
...
@@ -123,27 +66,10 @@ public class Owner extends User implements Serializable {
}
}
/**
* Checks if a pet belongs to this owner.
*
* @param pet the pet whose property will be checked.
* @return {@code true} if the pet belongs to this owner. {@code false}
* otherwise.
*/
public
boolean
ownsPet
(
Pet
pet
)
{
return
this
.
pets
.
contains
(
pet
);
}
/**
* Adds a pet directly to the pets collection of this owner if the pet does
* not already belongs to this owner. The pet's owner will not be updated.
* If the pet already belongs to this owner, no action will be done.
*
*
* @param pet the pet to add to this owner. {@code null} values not
* supported.
* @throws NullPointerException if the {@code pet} is {@code null}.
*/
void
internalAddPet
(
Pet
pet
)
{
requireNonNull
(
pet
,
"pet can't be null"
);
...
...
@@ -151,17 +77,10 @@ public class Owner extends User implements Serializable {
this
.
pets
.
add
(
pet
);
}
/**
* Removes a pet directly from the pets collection of this owner. The pet's
* owner will not be updated.
*
* @param pet the pet to remove from this owner. {@code null} values not
* supported.
* @throws NullPointerException if the {@code pet} is {@code null}.
*/
void
internalRemovePet
(
Pet
pet
)
{
requireNonNull
(
pet
,
"pet can't be null"
);
this
.
pets
.
remove
(
pet
);
}
}
domain/src/main/java/es/uvigo/esei/xcs/domain/entities/PeriodicType.java
0 → 100644
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
domain
.
entities
;
public
enum
PeriodicType
{
DAYS
,
MONTHS
,
YEARS
}
domain/src/main/java/es/uvigo/esei/xcs/domain/entities/PeriodicVaccine.java
0 → 100644
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
domain
.
entities
;
import
java.io.Serializable
;
import
javax.persistence.Column
;
import
javax.persistence.DiscriminatorValue
;
import
javax.persistence.Entity
;
import
javax.persistence.EnumType
;
import
javax.persistence.Enumerated
;
@Entity
@DiscriminatorValue
(
"PERIODIC"
)
public
class
PeriodicVaccine
extends
Vaccine
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@Enumerated
(
EnumType
.
STRING
)
@Column
(
name
=
"periodicType"
,
nullable
=
true
,
length
=
6
)
private
PeriodicType
periodicType
;
@Column
(
name
=
"periode"
,
nullable
=
true
)
private
Integer
periode
;
public
PeriodicVaccine
()
{}
public
PeriodicVaccine
(
String
name
,
PeriodicType
periodicType
,
Integer
periode
)
{
super
(
name
);
this
.
periodicType
=
periodicType
;
this
.
periode
=
periode
;
}
public
PeriodicType
getPeriodicType
()
{
return
this
.
periodicType
;
}
public
void
setPeriodicType
(
PeriodicType
periodicType
)
{
this
.
periodicType
=
periodicType
;
}
public
Integer
getPeriode
()
{
return
this
.
periode
;
}
public
void
setPeriode
(
Integer
periode
)
{
this
.
periode
=
periode
;
}
}
domain/src/main/java/es/uvigo/esei/xcs/domain/entities/Pet.java
View file @
4190697b
...
...
@@ -4,17 +4,28 @@ import static java.util.Objects.requireNonNull;
import
static
org
.
apache
.
commons
.
lang3
.
Validate
.
inclusiveBetween
;
import
java.io.Serializable
;
import
java.util.Collection
;
import
java.util.Date
;
import
java.util.HashSet
;
import
java.util.Set
;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
import
javax.persistence.CascadeType
;
import
javax.persistence.Column
;
import
javax.persistence.Entity
;
import
javax.persistence.EnumType
;
import
javax.persistence.Enumerated
;
import
javax.persistence.FetchType
;
import
javax.persistence.GeneratedValue
;
import
javax.persistence.GenerationType
;
import
javax.persistence.Id
;
import
javax.persistence.JoinColumn
;
import
javax.persistence.JoinTable
;
import
javax.persistence.ManyToMany
;
import
javax.persistence.ManyToOne
;
import
javax.persistence.OneToMany
;
import
javax.persistence.Temporal
;
import
javax.persistence.TemporalType
;
import
javax.xml.bind.annotation.XmlAccessType
;
...
...
@@ -22,11 +33,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
import
javax.xml.bind.annotation.XmlRootElement
;
import
javax.xml.bind.annotation.XmlTransient
;
/**
* A pet.
*
* @author Miguel Reboiro-Jato
*/
@Entity
(
name
=
"Pet"
)
@XmlRootElement
(
name
=
"pet"
,
namespace
=
"http://entities.domain.xcs.esei.uvigo.es"
)
@XmlAccessorType
(
XmlAccessType
.
FIELD
)
...
...
@@ -35,7 +42,15 @@ public class Pet implements Serializable {
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
private
int
id
;
private
Long
id
;
@OneToMany
(
mappedBy
=
"pet"
,
cascade
=
CascadeType
.
ALL
,
orphanRemoval
=
true
,
fetch
=
FetchType
.
EAGER
)
private
Set
<
Identifier
>
identifiers
;
@Column
(
length
=
100
,
nullable
=
false
)
private
String
name
;
...
...
@@ -53,84 +68,47 @@ public class Pet implements Serializable {
@XmlTransient
private
Owner
owner
;
// Required for JPA.
Pet
()
{}
// For testing purposes.
Pet
(
int
id
,
String
name
,
AnimalType
animal
,
Date
birth
)
{
this
(
name
,
animal
,
birth
,
null
);
this
.
id
=
id
;
}
/**
* Creates a new instance of {@code Pet} without owner.
*
* @param name the name of the pet. This parameter must be a non empty and
* non {@code null} string with a maximum length of 100 chars.
* @param animal the type of animal. This parameter can not be {@code null}.
* @param birth the date of birth of this pet. This parameter can not be
* {@code null} and the date can not be after the current date.
*
* @throws NullPointerException if a {@code null} value is passed as the
* value for any parameter.
* @throws IllegalArgumentException if value provided for any parameter is
* not valid according to its description.
*/
public
Pet
(
String
name
,
AnimalType
animal
,
Date
birth
)
{
this
(
name
,
animal
,
birth
,
null
);
}
/**
* Creates a new instance of {@code Pet} with owner.
*
* @param name the name of the pet. This parameter must be a non empty and
* non {@code null} string with a maximum length of 100 chars.
* @param animal the type of animal. This parameter can not be {@code null}.
* @param birth the date of birth of this pet. This parameter can not be
* {@code null} and the date can not be after the current date.
* @param owner the owner of the pet. {@code null} value is valid,
* meaning that the pet has no owner.
*
* @throws NullPointerException if a {@code null} value is passed as the
* value for any parameter except for {@code owner}.
* @throws IllegalArgumentException if value provided for any parameter is
* not valid according to its description.
*/
@ManyToMany
(
fetch
=
FetchType
.
LAZY
,
cascade
=
{
CascadeType
.
PERSIST
,
CascadeType
.
MERGE
}
)
@JoinTable
(
name
=
"pet_vet"
,
joinColumns
=
@JoinColumn
(
name
=
"pet_id"
),
inverseJoinColumns
=
@JoinColumn
(
name
=
"vet_login"
,
referencedColumnName
=
"login"
,
nullable
=
false
)
)
@XmlTransient
private
Set
<
Vet
>
vets
;
@OneToMany
(
mappedBy
=
"pet"
,
cascade
=
CascadeType
.
ALL
,
orphanRemoval
=
true
,
fetch
=
FetchType
.
EAGER
)
private
Set
<
Vaccination
>
vaccinations
;
public
Pet
()
{}
public
Pet
(
String
name
,
AnimalType
animal
,
Date
birth
,
Owner
owner
)
{
this
.
identifiers
=
new
HashSet
<
Identifier
>();
this
.
setName
(
name
);
this
.
setAnimal
(
animal
);
this
.
setBirth
(
birth
);
this
.
setOwner
(
owner
);
this
.
vets
=
new
HashSet
<
Vet
>();
this
.
vaccinations
=
new
HashSet
<
Vaccination
>();
}
/**
* Returns the identifier of this pet.
*
* @return the identifier of this pet.
*/
public
int
getId
()
{
public
Long
getId
()
{
return
id
;
}
/**
* Returns the name of the pet.
*
* @return the name of the pet.
*/
public
String
getName
()
{
return
name
;
}
/**
* Sets the name of the pet.
*
* @param name the new name of the pet. This parameter must be a non empty
* and non {@code null} string with a maximum length of 100 chars.
*
* @throws NullPointerException if a {@code null} value is passed.
* @throws IllegalArgumentException if the length of the string passed is
* not valid.
*/
public
void
setName
(
String
name
)
{
requireNonNull
(
name
,
"name can't be null"
);
inclusiveBetween
(
1
,
100
,
name
.
length
(),
"name must have a length between 1 and 100"
);
...
...
@@ -138,48 +116,20 @@ public class Pet implements Serializable {
this
.
name
=
name
;
}
/**
* Returns the type of animal of this pet.
*
* @return the type of animal of this pet.
*/
public
AnimalType
getAnimal
()
{
return
animal
;
}
/**
* Sets the animal type of this pet.
*
* @param animal the new animal type for this pet. This parameter can not be
* {@code null}.
*
* @throws NullPointerException if a {@code null} value is passed.
*/
public
void
setAnimal
(
AnimalType
animal
)
{
requireNonNull
(
animal
,
"animal can't be null"
);
this
.
animal
=
animal
;
}
/**
* Returns the date of birth of this pet.
*
* @return the date of birth of this pet.
*/
public
Date
getBirth
()
{
return
birth
;
}
/**
* Sets the date of birth of this pet.
*
* @param birth the new date of birth for this pet. This parameter can not
* be {@code null} and the date can not be previous to the current date.
*
* @throws NullPointerException if a {@code null} value is passed.
* @throws IllegalArgumentException if the value provided is after the
* current date.
*/
public
void
setBirth
(
Date
birth
)
{
requireNonNull
(
birth
,
"birth can't be null"
);
inclusiveBetween
(
new
Date
(
0
),
new
Date
(),
birth
,
...
...
@@ -189,23 +139,10 @@ public class Pet implements Serializable {
this
.
birth
=
birth
;
}
/**
* Returns the owner of this pet. The value returned can be {@code null},
* meaning that the pet has no owner.
*
* @return the owner of this pet.
*/
public
Owner
getOwner
()
{
return
owner
;
}
/**
* Sets the owner of this pet. The new owner can be {@code null}, meaning
* that the pet has no owner.
*
* @param owner the new owner of the pet. {@code null} value is valid,
* meaning that the pet has no owner.
*/
public
void
setOwner
(
Owner
owner
)
{
if
(
this
.
owner
!=
null
)
this
.
owner
.
internalRemovePet
(
this
);
...
...
@@ -215,4 +152,97 @@ public class Pet implements Serializable {
if
(
this
.
owner
!=
null
)
this
.
owner
.
internalAddPet
(
this
);
}
public
Boolean
ownsVet
(
Vet
vet
)
{
return
this
.
vets
.
contains
(
vet
);
}
public
Boolean
ownsVaccination
(
Vaccination
vaccination
)
{
return
this
.
vaccinations
.
contains
(
vaccination
);
}
public
Boolean
ownsIdentifier
(
Identifier
identifier
)
{
return
this
.
identifiers
.
contains
(
identifier
);
}
public
Collection
<
Vet
>
getVets
()
{
return
this
.
vets
;
}
public
void
addVet
(
Vet
vet
)
{
requireNonNull
(
vet
,
"Vet can't be null"
);
vet
.
internalAddPet
(
this
);
}
public
void
internalAddVet
(
Vet
vet
)
{
requireNonNull
(
vet
,
"Vet can't be null"
);
if
(!
ownsVet
(
vet
))
{
this
.
vets
.
add
(
vet
);
}
}
public
void
removeVet
(
Vet
vet
)
{
vet
.
internalRemovePet
(
this
);
}
public
void
internalRemoveVet
(
Vet
vet
)
{
this
.
vets
.
remove
(
vet
);
}
public
Collection
<
Vaccination
>
getVaccinations
()
{
return
this
.
vaccinations
;
}
public
void
addVaccination
(
Vaccination
vaccination
)
{
requireNonNull
(
vaccination
,
"Vaccination can't be null"
);
vaccination
.
setPet
(
this
);
}
void
internalAddVaccination
(
Vaccination
vaccination
)
{
requireNonNull
(
vaccination
,
"Vaccination can't be null"
);
if
(!
ownsVaccination
(
vaccination
)
&&
this
.
equals
(
vaccination
.
getPet
()))
{
this
.
vaccinations
.
add
(
vaccination
);
}
}
public
void
removeVaccination
(
Vaccination
vaccination
)
{
requireNonNull
(
vaccination
,
"Vaccination can't be null"
);
if
(
this
.
equals
(
vaccination
.
getPet
()))
{
vaccination
.
setPet
(
null
);
}
}
void
internalRemoveVaccination
(
Vaccination
vaccination
)
{
this
.
vaccinations
.
remove
(
vaccination
);
}
public
void
addIdentifier
(
Identifier
identifier
)
{
requireNonNull
(
identifier
,
"Identifier can't be null"
);
identifier
.
setPet
(
this
);
}
void
internalAddIdentifier
(
Identifier
identifier
)
{
requireNonNull
(
identifier
,
"Identifier can't be null"
);
if
(!
ownsIdentifier
(
identifier
))
{
this
.
identifiers
.
add
(
identifier
);
}
}
public
void
removeIdentifier
(
Identifier
identifier
)
{
requireNonNull
(
identifier
,
"Identifier can't be null"
);
if
(
this
.
equals
(
identifier
.
getPet
()))
{
identifier
.
setPet
(
null
);
}
}
void
internalRemoveIdentifier
(
Identifier
identifier
)
{
this
.
identifiers
.
remove
(
identifier
);
}
}
domain/src/main/java/es/uvigo/esei/xcs/domain/entities/User.java
View file @
4190697b
...
...
@@ -36,45 +36,17 @@ public abstract class User implements Serializable {
@Column
(
name
=
"role"
,
insertable
=
false
,
updatable
=
false
)
protected
String
role
;
User
()
{}
/**
* Creates a new instance of {@code User}.
*
* @param login the login that identifies the user. This parameter must be a
* non empty and non {@code null} string with a maximum length of 100 chars.
* @param password the raw password of the user. This parameter must be a
* non {@code null} string with a minimum length of 6 chars.
*
* @throws NullPointerException if a {@code null} value is passed as the
* value for any parameter.
* @throws IllegalArgumentException if value provided for any parameter is
* not valid according to its description.
*/
public
User
(
String
login
,
String
password
)
{
public
User
()
{}
User
(
String
login
,
String
password
)
{
this
.
setLogin
(
login
);
this
.
changePassword
(
password
);
}
/**
* Returns the login of this user.
*
* @return the login of this user.
*/
public
String
getLogin
()
{
return
login
;
}
/**
* Sets the login of this user.
*
* @param login the login that identifies the user. This parameter
* must be a non empty and non {@code null} string with a maximum length of
* 100 chars.
* @throws NullPointerException if {@code null} is passed as parameter.
* @throws IllegalArgumentException if the length of the string passed is
* not valid.
*/
public
void
setLogin
(
String
login
)
{
requireNonNull
(
login
,
"login can't be null"
);
inclusiveBetween
(
1
,
100
,
login
.
length
(),
"login must have a length between 1 and 100"
);
...
...
@@ -82,37 +54,14 @@ public abstract class User implements Serializable {
this
.
login
=
login
;
}
/**
* Returns the role of the user. This value is automatically set by JPA, as
* it is the value used as discriminator in the inheritance.
*
* @return the role of the user.
*/
public
String
getRole
()
{
return
role
;
}
/**
* Returns the MD5 of the user's password. Capital letters are used
* in the returned string.
*
* @return the MD5 of the user's password. Capital letters are used
* in the returned string.
*/
public
String
getPassword
()
{
return
password
;
}
/**
* Sets the MD5 password of the user. The MD5 string is stored with
* capital letters.
*
* @param password the MD5 password of the user. This parameter must be a
* non {@code null} MD5 string.
* @throws NullPointerException if {@code null} is passed as parameter.
* @throws IllegalArgumentException if the string passed is not a valid MD5
* string.
*/
public
void
setPassword
(
String
password
)
{
requireNonNull
(
password
,
"password can't be null"
);
matchesPattern
(
password
,
"[a-zA-Z0-9]{32}"
,
"password must be a valid MD5 string"
);
...
...
@@ -120,17 +69,6 @@ public abstract class User implements Serializable {
this
.
password
=
password
.
toUpperCase
();
}
/**
* Changes the password of the user. This method receives the rawvalue of
* the password and stores it in MD5 format.
*
* @param password the raw password of the user. This parameter must be a
* non {@code null} string with a minimum length of 6 chars.
*
* @throws NullPointerException if the {@code password} is {@code null}.
* @throws IllegalArgumentException if the length of the string passed is
* not valid.
*/
public
void
changePassword
(
String
password
)
{
requireNonNull
(
password
,
"password can't be null"
);
if
(
password
.
length
()
<
6
)
...
...
@@ -145,4 +83,5 @@ public abstract class User implements Serializable {
throw
new
RuntimeException
(
"MD5 algorithm not found"
,
e
);
}
}
}
\ No newline at end of file
domain/src/main/java/es/uvigo/esei/xcs/domain/entities/Vaccination.java
0 → 100644
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
domain
.
entities
;
import
static
java
.
util
.
Objects
.
requireNonNull
;
import
java.io.Serializable
;
import
java.util.Date
;
import
javax.persistence.Entity
;
import
javax.persistence.FetchType
;
import
javax.persistence.GeneratedValue
;
import
javax.persistence.GenerationType
;
import
javax.persistence.Id
;
import
javax.persistence.ManyToOne
;
import
javax.persistence.Temporal
;
import
javax.persistence.TemporalType
;
import
javax.xml.bind.annotation.XmlTransient
;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
@Entity
public
class
Vaccination
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
public
Vaccination
()
{}
public
Vaccination
(
Pet
pet
,
Vaccine
vaccine
,
Date
date
)
{
this
.
pet
=
pet
;
this
.
vaccine
=
vaccine
;
this
.
date
=
date
;
}
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
//AUTO no genera auto_increment en MySQL
private
Long
id
;
@Temporal
(
TemporalType
.
DATE
)
private
Date
date
;
@ManyToOne
(
fetch
=
FetchType
.
LAZY
)
@JsonIgnore
private
Pet
pet
;
@ManyToOne
(
fetch
=
FetchType
.
EAGER
)
private
Vaccine
vaccine
;
public
Long
getId
()
{
return
this
.
id
;
}
public
Date
getDate
()
{
return
this
.
date
;
}
public
void
setDate
(
Date
date
)
{
requireNonNull
(
date
);
this
.
date
=
date
;
}
public
Pet
getPet
()
{
return
this
.
pet
;
}
public
void
setPet
(
Pet
pet
)
{
if
(
this
.
pet
!=
null
)
{
this
.
pet
.
internalRemoveVaccination
(
this
);
}
this
.
pet
=
pet
;
if
(
pet
!=
null
)
{
pet
.
internalAddVaccination
(
this
);
}
}
public
Vaccine
getVaccine
()
{
return
this
.
vaccine
;
}
public
void
setVaccine
(
Vaccine
vaccine
)
{
this
.
vaccine
=
vaccine
;
}
}
domain/src/main/java/es/uvigo/esei/xcs/domain/entities/Vaccine.java
0 → 100644
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
domain
.
entities
;
import
static
java
.
util
.
Objects
.
requireNonNull
;
import
java.io.Serializable
;
import
java.util.Collection
;
import
java.util.HashSet
;
import
java.util.Set
;
import
javax.persistence.CascadeType
;
import
javax.persistence.Column
;
import
javax.persistence.DiscriminatorColumn
;
import
javax.persistence.Entity
;
import
javax.persistence.FetchType
;
import
javax.persistence.GeneratedValue
;
import
javax.persistence.GenerationType
;
import
javax.persistence.Id
;
import
javax.persistence.Inheritance
;
import
javax.persistence.InheritanceType
;
import
javax.persistence.OneToMany
;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
@Entity
@Inheritance
(
strategy
=
InheritanceType
.
SINGLE_TABLE
)
@DiscriminatorColumn
(
name
=
"VACCINE_TYPE"
)
public
class
Vaccine
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
public
Vaccine
()
{}
public
Vaccine
(
String
name
)
{
this
.
name
=
name
;
this
.
vaccinations
=
new
HashSet
<
Vaccination
>();
}
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
//AUTO no genera auto_increment en MySQL
private
Long
id
;
@Column
(
name
=
"name"
,
nullable
=
false
,
length
=
128
)
protected
String
name
;
@OneToMany
(
mappedBy
=
"vaccine"
,
cascade
=
CascadeType
.
ALL
,
orphanRemoval
=
true
,
fetch
=
FetchType
.
EAGER
)
@JsonIgnore
private
Set
<
Vaccination
>
vaccinations
;
public
Long
getId
()
{
return
id
;
}
public
String
getName
()
{
return
this
.
name
;
}
public
void
setName
(
String
name
)
{
this
.
name
=
name
;
}
public
Boolean
ownsVaccination
(
Vaccination
vaccination
)
{
return
this
.
vaccinations
.
contains
(
vaccination
);
}
public
Collection
<
Vaccination
>
getVaccinations
()
{
return
this
.
vaccinations
;
}
public
void
addVaccination
(
Vaccination
vaccination
)
{
requireNonNull
(
vaccination
,
"Vaccination can't be null"
);
vaccination
.
setVaccine
(
this
);
}
void
internalAddVaccination
(
Vaccination
vaccination
)
{
requireNonNull
(
vaccination
,
"Vaccination can't be null"
);
if
(!
ownsVaccination
(
vaccination
))
{
this
.
vaccinations
.
add
(
vaccination
);
}
}
public
void
removeVaccination
(
Vaccination
vaccination
)
{
requireNonNull
(
vaccination
,
"Vaccination can't be null"
);
vaccination
.
setVaccine
(
null
);
}
void
internalRemoveVaccination
(
Vaccination
vaccination
)
{
this
.
vaccinations
.
remove
(
vaccination
);
}
}
domain/src/main/java/es/uvigo/esei/xcs/domain/entities/Vet.java
0 → 100644
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
domain
.
entities
;
import
static
java
.
util
.
Arrays
.
stream
;
import
static
java
.
util
.
Collections
.
unmodifiableCollection
;
import
static
java
.
util
.
Objects
.
requireNonNull
;
import
java.io.Serializable
;
import
java.util.Collection
;
import
java.util.HashSet
;
import
java.util.Set
;
import
javax.persistence.DiscriminatorValue
;
import
javax.persistence.Entity
;
import
javax.persistence.FetchType
;
import
javax.persistence.ManyToMany
;
@Entity
@DiscriminatorValue
(
"VET"
)
public
class
Vet
extends
User
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@ManyToMany
(
mappedBy
=
"vets"
,
fetch
=
FetchType
.
EAGER
)
Set
<
Pet
>
pets
;
public
Vet
(){}
Vet
(
String
login
,
String
password
)
{
super
(
login
,
password
);
this
.
role
=
"VET"
;
this
.
pets
=
new
HashSet
<>();
}
public
Vet
(
String
login
,
String
password
,
Pet
...
pets
)
{
this
(
login
,
password
);
stream
(
pets
).
forEach
(
this
::
addPet
);
}
public
Collection
<
Pet
>
getPets
()
{
return
unmodifiableCollection
(
pets
);
}
public
void
addPet
(
Pet
pet
)
{
requireNonNull
(
pet
,
"pet can't be null"
);
if
(!
this
.
ownsPet
(
pet
))
{
pet
.
internalAddVet
(
this
);
}
}
public
void
removePet
(
Pet
pet
)
{
requireNonNull
(
pet
,
"pet can't be null"
);
if
(
this
.
ownsPet
(
pet
))
{
pet
.
internalRemoveVet
(
this
);
}
else
{
throw
new
IllegalArgumentException
(
"pet doesn't belong to this vet"
);
}
}
public
boolean
ownsPet
(
Pet
pet
)
{
return
this
.
pets
.
contains
(
pet
);
}
void
internalAddPet
(
Pet
pet
)
{
requireNonNull
(
pet
,
"pet can't be null"
);
if
(!
this
.
ownsPet
(
pet
))
this
.
pets
.
add
(
pet
);
}
void
internalRemovePet
(
Pet
pet
)
{
requireNonNull
(
pet
,
"pet can't be null"
);
this
.
pets
.
remove
(
pet
);
}
}
domain/src/test/java/es/uvigo/esei/xcs/domain/entities/AdministratorTest.java
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
domain
.
entities
;
/*
package es.uvigo.esei.xcs.domain.entities;
public class AdministratorTest extends UserTest {
@Override
...
...
@@ -6,3 +6,4 @@ public class AdministratorTest extends UserTest {
return new Administrator(login, password);
}
}
*/
\ No newline at end of file
domain/src/test/java/es/uvigo/esei/xcs/domain/entities/EntitiesTestSuite.java
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
domain
.
entities
;
/*
package es.uvigo.esei.xcs.domain.entities;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
...
...
@@ -11,3 +11,4 @@ import org.junit.runners.Suite.SuiteClasses;
PetTest.class
})
public class EntitiesTestSuite {}
*/
\ No newline at end of file
domain/src/test/java/es/uvigo/esei/xcs/domain/entities/MonodoseVaccineTest.java
0 → 100644
View file @
4190697b
/*package es.uvigo.esei.xcs.domain.entities;
import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.MatcherAssert.assertThat;
import org.junit.Before;
import org.junit.Test;
public class MonodoseVaccineTest {
private MonodoseVaccine vaccine;
@Before
public void setUp() {
vaccine = new MonodoseVaccine("Rabies");
}
@Test
public void testConstructorAndGetName() {
assertThat(vaccine.getName(), is("Rabies"));
}
@Test
public void testSetName() {
vaccine.setName("Distemper");
assertThat(vaccine.getName(), is("Distemper"));
}
}
*/
domain/src/test/java/es/uvigo/esei/xcs/domain/entities/MultidoseVaccineTest.java
0 → 100644
View file @
4190697b
/*package es.uvigo.esei.xcs.domain.entities;
import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.MatcherAssert.assertThat;
import org.junit.Before;
import org.junit.Test;
public class MultidoseVaccineTest {
private MultidoseVaccine vaccine;
@Before
public void setUp() {
vaccine = new MultidoseVaccine("Parvo", 3);
}
@Test
public void testConstructorAndGetters() {
assertThat(vaccine.getName(), is("Parvo"));
assertThat(vaccine.getDoses(), is(3));
}
@Test
public void testSetName() {
vaccine.setName("Distemper");
assertThat(vaccine.getName(), is("Distemper"));
}
@Test
public void testSetDoses() {
vaccine.setDoses(5);
assertThat(vaccine.getDoses(), is(5));
}
}
*/
\ No newline at end of file
domain/src/test/java/es/uvigo/esei/xcs/domain/entities/OwnerTest.java
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
domain
.
entities
;
/*
package es.uvigo.esei.xcs.domain.entities;
import static java.util.Arrays.copyOfRange;
import
static
org
.
apache
.
commons
.
lang3
.
StringUtils
.
repeat
;
import
static
org
.
hamcrest
.
CoreMatchers
.
equalTo
;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.nullValue;
import
static
org
.
hamcrest
.
collection
.
IsEmptyIterable
.
emptyIterable
;
import
static
org
.
hamcrest
.
collection
.
IsIterableContainingInAnyOrder
.
containsInAnyOrder
;
import
static
org
.
hamcrest
.
collection
.
IsIterableContainingInOrder
.
contains
;
import static org.hamcrest.MatcherAssert.assertThat;
import java.util.Date;
...
...
@@ -17,20 +12,21 @@ import org.junit.Test;
public class OwnerTest extends UserTest {
private Pet[] pets;
private Pet petOwned;
private Pet petNotOwned;
private Pet[] petsWithoutOwned;
private Owner owner;
@Before
public void setUpOwner() throws Exception {
this.owner = new Owner("juan", "123456");
this.pets = new Pet[] {
new
Pet
(
"Lassie"
,
AnimalType
.
DOG
,
new
Date
()
),
new
Pet
(
"Pajaroto"
,
AnimalType
.
BIRD
,
new
Date
()
)
new Pet("Lassie", AnimalType.DOG, new Date(), owner
),
new Pet("Pajaroto", AnimalType.BIRD, new Date(), owner
)
};
this
.
petNotOwned
=
new
Pet
(
"Doraemon"
,
AnimalType
.
CAT
,
new
Date
());
this.petOwned = this.pets[1];
this.petNotOwned = new Pet("Doraemon", AnimalType.CAT, new Date(), new Owner("otro", "000000"));
this.petsWithoutOwned = copyOfRange(this.pets, 0, 1);
}
...
...
@@ -40,179 +36,23 @@ public class OwnerTest extends UserTest {
}
@Test
public
void
testOwnerStringStringCollection
()
{
final
String
[]
logins
=
{
login
,
"A"
,
repeat
(
'A'
,
100
)
};
for
(
String
login
:
logins
)
{
final
Owner
owner
=
new
Owner
(
login
,
password
,
pets
);
assertThat
(
owner
.
getLogin
(),
is
(
equalTo
(
login
)));
assertThat
(
owner
.
getPassword
(),
is
(
equalTo
(
md5Pass
)));
assertThat
(
owner
.
getPets
(),
containsInAnyOrder
(
pets
));
}
}
@Test
public
void
testOwnerStringStringCollectionEmptyPets
()
{
final
Owner
owner
=
new
Owner
(
login
,
password
,
new
Pet
[
0
]);
assertThat
(
owner
.
getLogin
(),
is
(
equalTo
(
login
)));
assertThat
(
owner
.
getPassword
(),
is
(
equalTo
(
md5Pass
)));
assertThat
(
owner
.
getPets
(),
is
(
emptyIterable
()));
}
@Test
(
expected
=
NullPointerException
.
class
)
public
void
testOwnerStringStringCollectionNullLogin
()
{
new
Owner
(
null
,
password
,
pets
);
}
@Test
(
expected
=
NullPointerException
.
class
)
public
void
testOwnerStringStringCollectionNullPassword
()
{
new
Owner
(
login
,
null
,
pets
);
}
@Test
(
expected
=
IllegalArgumentException
.
class
)
public
void
testOwnerStringStringCollectionLoginTooShort
()
{
new
Owner
(
shortLogin
,
password
,
pets
);
}
@Test
(
expected
=
IllegalArgumentException
.
class
)
public
void
testOwnerStringStringCollectionLoginTooLong
()
{
new
Owner
(
longLogin
,
password
,
pets
);
}
@Test
(
expected
=
IllegalArgumentException
.
class
)
public
void
testOwnerStringStringCollectionPasswordTooShort
()
{
new
Owner
(
login
,
shortPassword
,
pets
);
}
@Test
(
expected
=
NullPointerException
.
class
)
public
void
testOwnerStringStringCollectionNullPets
()
{
new
Owner
(
login
,
password
,
(
Pet
[])
null
);
}
@Test
(
expected
=
NullPointerException
.
class
)
public
void
testOwnerStringStringCollectionPasswordPetsWithNull
()
{
new
Owner
(
login
,
password
,
new
Pet
[]
{
petNotOwned
,
null
});
}
@Test
public
void
testAddPet
()
{
final
Owner
owner
=
new
Owner
(
login
,
password
);
owner
.
addPet
(
petNotOwned
);
assertThat
(
owner
.
getPets
(),
contains
(
petNotOwned
));
assertThat
(
petNotOwned
.
getOwner
(),
is
(
owner
));
}
@Test
public
void
testAddPetAlreadyOwned
()
{
final
Owner
owner
=
new
Owner
(
login
,
password
,
pets
);
owner
.
addPet
(
petOwned
);
assertThat
(
owner
.
getPets
(),
containsInAnyOrder
(
pets
));
}
public void testAddPetAndOwnerLink() {
final Owner newOwner = new Owner("ana", "password");
final Pet pet = new Pet("Milo", AnimalType.DOG, new Date(), new Owner("old", "111111"));
@Test
(
expected
=
NullPointerException
.
class
)
public
void
testAddPetNull
()
{
final
Owner
owner
=
new
Owner
(
login
,
password
);
newOwner.addPet(pet);
owner
.
addPet
(
null
);
assertThat(newOwner.ownsPet(pet), is(true));
assertThat(pet.getOwner(), is(newOwner));
}
@Test
public
void
testRemovePet
()
{
final
Owner
owner
=
new
Owner
(
login
,
password
,
pets
);
public void testRemovePetAndOwnerLink() {
final Owner owner = new Owner("carlos", "password", pets);
owner.removePet(petOwned);
assertThat
(
owner
.
getPets
(),
contains
(
petsWithoutOwned
));
assertThat
(
petOwned
.
getOwner
(),
is
(
nullValue
()));
}
@Test
(
expected
=
NullPointerException
.
class
)
public
void
testRemovePetNull
()
{
final
Owner
owner
=
new
Owner
(
login
,
password
);
owner
.
removePet
(
null
);
}
@Test
(
expected
=
IllegalArgumentException
.
class
)
public
void
testRemovePetNotOwned
()
{
final
Owner
owner
=
new
Owner
(
login
,
password
);
owner
.
removePet
(
petNotOwned
);
}
@Test
public
void
testOwnsPet
()
{
final
Owner
owner
=
new
Owner
(
login
,
password
,
pets
);
for
(
Pet
pet
:
pets
)
{
assertThat
(
owner
.
ownsPet
(
pet
),
is
(
true
));
}
assertThat
(
owner
.
ownsPet
(
petNotOwned
),
is
(
false
));
}
@Test
public
void
testOwnsPetNotOwned
()
{
final
Owner
owner
=
new
Owner
(
login
,
password
,
pets
);
assertThat
(
owner
.
ownsPet
(
petNotOwned
),
is
(
false
));
}
@Test
public
void
testOwnsPetNull
()
{
final
Owner
owner
=
new
Owner
(
login
,
password
,
pets
);
assertThat
(
owner
.
ownsPet
(
null
),
is
(
false
));
}
@Test
public
void
testInternalAddPet
()
{
final
Owner
owner
=
new
Owner
(
login
,
password
);
owner
.
internalAddPet
(
petNotOwned
);
assertThat
(
owner
.
getPets
(),
contains
(
petNotOwned
));
}
@Test
public
void
testInternalAddPetAlreadyOwned
()
{
final
Owner
owner
=
new
Owner
(
login
,
password
,
pets
);
owner
.
internalAddPet
(
petOwned
);
assertThat
(
owner
.
getPets
(),
containsInAnyOrder
(
pets
));
}
@Test
(
expected
=
NullPointerException
.
class
)
public
void
testInternalAddPetNull
()
{
final
Owner
owner
=
new
Owner
(
login
,
password
);
owner
.
internalAddPet
(
null
);
}
@Test
public
void
testInternalRemovePet
()
{
final
Owner
owner
=
new
Owner
(
login
,
password
,
pets
);
owner
.
internalRemovePet
(
petOwned
);
assertThat
(
owner
.
getPets
(),
contains
(
petsWithoutOwned
));
}
@Test
(
expected
=
NullPointerException
.
class
)
public
void
testSetLoginNullValue
()
{
final
Owner
owner
=
new
Owner
(
login
,
password
);
owner
.
setLogin
(
null
);
}
@Test
(
expected
=
NullPointerException
.
class
)
public
void
testInternalRemovePetNull
()
{
final
Owner
owner
=
new
Owner
(
login
,
password
,
pets
);
owner
.
internalRemovePet
(
null
);
assertThat(owner.ownsPet(petOwned), is(false));
assertThat(petOwned.getOwner(), is(nullValue()));
}
}
*/
domain/src/test/java/es/uvigo/esei/xcs/domain/entities/PeriodicVaccineTest.java
0 → 100644
View file @
4190697b
/*package es.uvigo.esei.xcs.domain.entities;
import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.MatcherAssert.assertThat;
import org.junit.Before;
import org.junit.Test;
public class PeriodicVaccineTest {
private PeriodicVaccine vaccine;
@Before
public void setUp() {
vaccine = new PeriodicVaccine("Hepatitis", PeriodicType.YEARS, 12);
}
@Test
public void testConstructorAndGetters() {
assertThat(vaccine.getName(), is("Hepatitis"));
assertThat(vaccine.getPeriodicType(), is(PeriodicType.YEARS));
assertThat(vaccine.getPeriode(), is(12));
}
@Test
public void testSetName() {
vaccine.setName("Distemper");
assertThat(vaccine.getName(), is("Distemper"));
}
@Test
public void testSetPeriodicType() {
vaccine.setPeriodicType(PeriodicType.MONTHS);
assertThat(vaccine.getPeriodicType(), is(PeriodicType.MONTHS));
}
@Test
public void testSetPeriode() {
vaccine.setPeriode(6);
assertThat(vaccine.getPeriode(), is(6));
}
}
*/
\ No newline at end of file
domain/src/test/java/es/uvigo/esei/xcs/domain/entities/PetTest.java
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
domain
.
entities
;
/*
package es.uvigo.esei.xcs.domain.entities;
import
static
org
.
apache
.
commons
.
lang3
.
StringUtils
.
repeat
;
import
static
org
.
hamcrest
.
CoreMatchers
.
equalTo
;
import
static
org
.
hamcrest
.
CoreMatchers
.
is
;
import
static
org
.
hamcrest
.
CoreMatchers
.
nullValue
;
import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.collection.IsEmptyCollection.empty;
import java.util.Date;
import
org.apache.commons.lang3.StringUtils
;
import org.junit.Before;
import org.junit.Test;
public class PetTest {
private
String
name
;
private
AnimalType
animalType
;
private
Date
birth
;
private Pet pet;
private Owner owner;
private
String
newName
;
private
AnimalType
newAnimalType
;
private
Owner
newOwner
;
private
Date
futureDate
;
private
Date
newBirth
;
private Vet vet;
private Vaccination vaccination;
@Before
public
void
setUp
()
throws
Exception
{
this
.
name
=
"Rex"
;
this
.
animalType
=
AnimalType
.
DOG
;
this
.
birth
=
new
Date
();
this
.
owner
=
new
Owner
(
"pepe"
,
"pepepass"
);
this
.
newName
=
"Ein"
;
this
.
newAnimalType
=
AnimalType
.
BIRD
;
this
.
newOwner
=
new
Owner
(
"José"
,
"josepass"
);
final
int
oneDay
=
24
*
60
*
60
*
1000
;
this
.
newBirth
=
new
Date
(
System
.
currentTimeMillis
()
-
oneDay
);
this
.
futureDate
=
new
Date
(
System
.
currentTimeMillis
()
+
oneDay
);
public void setUp() {
owner = new Owner("Pepe", "pepepa");
vet = new Vet("DrVet", "vetpass");
vaccination = new Vaccination(new Date(), null, null);
pet = new Pet("Lassie", AnimalType.DOG, new Date(), owner);
}
@Test
public
void
testPetStringAnimalTypeDate
()
{
final
String
[]
names
=
{
name
,
"A"
,
StringUtils
.
repeat
(
"A"
,
100
)};
for
(
String
name
:
names
)
{
final
Pet
pet
=
new
Pet
(
name
,
animalType
,
birth
);
assertThat
(
pet
.
getName
(),
is
(
equalTo
(
name
)));
assertThat
(
pet
.
getAnimal
(),
is
(
equalTo
(
animalType
)));
assertThat
(
pet
.
getBirth
(),
is
(
equalTo
(
birth
)));
assertThat
(
pet
.
getOwner
(),
is
(
nullValue
()));
}
}
@Test
(
expected
=
NullPointerException
.
class
)
public
void
testPetStringAnimalTypeDateNullName
()
{
new
Pet
(
null
,
animalType
,
birth
);
}
@Test
(
expected
=
IllegalArgumentException
.
class
)
public
void
testPetStringAnimalTypeDateNameTooShort
()
{
new
Pet
(
""
,
animalType
,
birth
);
}
@Test
(
expected
=
IllegalArgumentException
.
class
)
public
void
testPetStringAnimalTypeDateNameTooLong
()
{
new
Pet
(
repeat
(
'A'
,
101
),
animalType
,
birth
);
}
@Test
(
expected
=
NullPointerException
.
class
)
public
void
testPetStringAnimalTypeDateNullAnimal
()
{
new
Pet
(
name
,
null
,
birth
);
}
@Test
(
expected
=
NullPointerException
.
class
)
public
void
testPetStringAnimalTypeDateNullBirth
()
{
new
Pet
(
name
,
animalType
,
null
);
}
@Test
(
expected
=
IllegalArgumentException
.
class
)
public
void
testPetStringAnimalTypeDateBirthAfterCurrent
()
{
new
Pet
(
name
,
animalType
,
futureDate
);
public void testConstructorAndGetters() {
assertThat(pet.getName(), is("Lassie"));
assertThat(pet.getAnimal(), is(AnimalType.DOG));
assertThat(pet.getOwner(), is(owner));
assertThat(pet.getVets(), is(empty()));
assertThat(pet.getVaccinations(), is(empty()));
}
@Test
public
void
testPetStringAnimalTypeDateOwner
()
{
final
String
[]
names
=
{
name
,
"A"
,
repeat
(
"A"
,
100
)}
;
for
(
String
name
:
names
)
{
final
Pet
pet
=
new
Pet
(
name
,
animalType
,
birth
,
owner
);
public void testSetNameAnimalBirth
() {
Date birth = new Date()
;
pet.setName("Rex");
pet.setAnimal(AnimalType.CAT);
pet.setBirth(birth
);
assertThat
(
pet
.
getName
(),
is
(
equalTo
(
name
)));
assertThat
(
pet
.
getAnimal
(),
is
(
equalTo
(
animalType
)));
assertThat
(
pet
.
getBirth
(),
is
(
equalTo
(
birth
)));
assertThat
(
pet
.
getOwner
(),
is
(
equalTo
(
owner
)));
assertThat
(
owner
.
ownsPet
(
pet
),
is
(
true
));
}
assertThat(pet.getName(), is("Rex"));
assertThat(pet.getAnimal(), is(AnimalType.CAT));
assertThat(pet.getBirth(), is(birth));
}
@Test(expected = NullPointerException.class)
public
void
testPetStringAnimalTypeDateOwnerNullName
()
{
new
Pet
(
null
,
animalType
,
birth
,
owner
);
}
@Test
(
expected
=
IllegalArgumentException
.
class
)
public
void
testPetStringAnimalTypeDateOwnerNameTooShort
()
{
new
Pet
(
""
,
animalType
,
birth
,
owner
);
}
@Test
(
expected
=
IllegalArgumentException
.
class
)
public
void
testPetStringAnimalTypeDateOwnerNameTooLong
()
{
new
Pet
(
repeat
(
'A'
,
101
),
animalType
,
birth
,
owner
);
}
public void testSetNameNull() { pet.setName(null); }
@Test(expected = NullPointerException.class)
public
void
testPetStringAnimalTypeDateOwnerNullAnimal
()
{
new
Pet
(
name
,
null
,
birth
,
owner
);
}
public void testSetAnimalNull() { pet.setAnimal(null); }
@Test(expected = NullPointerException.class)
public
void
testPetStringAnimalTypeDateOwnerNullBirth
()
{
new
Pet
(
name
,
animalType
,
null
,
owner
);
}
@Test
(
expected
=
IllegalArgumentException
.
class
)
public
void
testPetStringAnimalTypeDateOwnerBirthAfterCurrent
()
{
new
Pet
(
name
,
animalType
,
futureDate
,
owner
);
}
public void testSetBirthNull() { pet.setBirth(null); }
@Test
public
void
testSetName
()
{
final
Pet
pet
=
new
Pet
(
name
,
animalType
,
birth
);
public void testAddAndRemoveVet() {
pet.addVet(vet);
pet.internalAddVet(vet);
assertThat(pet.ownsVet(vet), is(true));
assertThat(vet.ownsPet(pet), is(true));
pet
.
setName
(
newName
);
assertThat
(
pet
.
getName
(),
is
(
equalTo
(
newName
)));
}
@Test
(
expected
=
NullPointerException
.
class
)
public
void
testSetNameNull
()
{
final
Pet
pet
=
new
Pet
(
name
,
animalType
,
birth
);
pet
.
setName
(
null
);
}
@Test
(
expected
=
IllegalArgumentException
.
class
)
public
void
testSetNameTooShort
()
{
final
Pet
pet
=
new
Pet
(
name
,
animalType
,
birth
);
pet
.
setName
(
""
);
}
@Test
(
expected
=
IllegalArgumentException
.
class
)
public
void
testSetNameNullLong
()
{
final
Pet
pet
=
new
Pet
(
name
,
animalType
,
birth
);
pet
.
setName
(
repeat
(
'A'
,
101
));
}
@Test
public
void
testSetAnimal
()
{
final
Pet
pet
=
new
Pet
(
name
,
animalType
,
birth
);
pet
.
setAnimal
(
newAnimalType
);
assertThat
(
pet
.
getAnimal
(),
is
(
equalTo
(
newAnimalType
)));
}
@Test
(
expected
=
NullPointerException
.
class
)
public
void
testSetAnimalNull
()
{
final
Pet
pet
=
new
Pet
(
name
,
animalType
,
birth
);
pet
.
setAnimal
(
null
);
}
@Test
public
void
testSetBirth
()
{
final
Pet
pet
=
new
Pet
(
name
,
animalType
,
birth
);
pet
.
setBirth
(
newBirth
);
assertThat
(
pet
.
getBirth
(),
is
(
equalTo
(
newBirth
)));
}
@Test
(
expected
=
NullPointerException
.
class
)
public
void
testSetBirthNull
()
{
final
Pet
pet
=
new
Pet
(
name
,
animalType
,
birth
);
pet
.
setBirth
(
null
);
}
@Test
(
expected
=
IllegalArgumentException
.
class
)
public
void
testSetBirthAfterCurrent
()
{
final
Pet
pet
=
new
Pet
(
name
,
animalType
,
birth
);
pet
.
setBirth
(
futureDate
);
}
@Test
public
void
testSetOwner
()
{
final
Pet
pet
=
new
Pet
(
name
,
animalType
,
birth
,
owner
);
pet
.
setOwner
(
newOwner
);
assertThat
(
pet
.
getOwner
(),
is
(
equalTo
(
newOwner
)));
assertThat
(
newOwner
.
ownsPet
(
pet
),
is
(
true
));
assertThat
(
owner
.
ownsPet
(
pet
),
is
(
false
));
pet.removeVet(vet);
pet.internalRemoveVet(vet);
assertThat(pet.ownsVet(vet), is(false));
assertThat(vet.ownsPet(pet), is(false));
}
@Test
public
void
testSetOwnerNull
()
{
final
Pet
pet
=
new
Pet
(
name
,
animalType
,
birth
,
owner
);
pet
.
setOwner
(
null
);
public void testAddAndRemoveVaccination() {
pet.addVaccination(vaccination);
pet.internalAddVaccination(vaccination);
assertThat(pet.ownsVaccination(vaccination), is(true));
assertThat(vaccination.getPet(), is(pet));
assertThat
(
pet
.
getOwner
(),
is
(
nullValue
()));
assertThat
(
owner
.
ownsPet
(
pet
),
is
(
false
));
pet.removeVaccination(vaccination);
pet.internalRemoveVaccination(vaccination);
assertThat(pet.ownsVaccination(vaccination), is(false));
assertThat(vaccination.getPet(), is(nullValue()));
}
}
*/
domain/src/test/java/es/uvigo/esei/xcs/domain/entities/UserTest.java
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
domain
.
entities
;
/*
package es.uvigo.esei.xcs.domain.entities;
import static org.apache.commons.lang3.StringUtils.repeat;
import static org.hamcrest.CoreMatchers.equalTo;
...
...
@@ -147,4 +147,4 @@ public abstract class UserTest {
admin.changePassword(shortPassword);
}
}
}
*/
domain/src/test/java/es/uvigo/esei/xcs/domain/entities/VaccinationTest.java
0 → 100644
View file @
4190697b
/*package es.uvigo.esei.xcs.domain.entities;
import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.MatcherAssert.assertThat;
import java.util.Date;
import org.junit.Before;
import org.junit.Test;
public class VaccinationTest {
private Vaccination vaccination;
private Date date;
private Pet pet;
private Vaccine vaccine;
@Before
public void setUp() {
vaccination = new Vaccination();
date = new Date();
pet = new Pet("Rocky", AnimalType.DOG, new Date(), null);
vaccine = new Vaccine("Rabies");
}
@Test
public void testSetAndGetDate() {
vaccination.setDate(date);
assertThat(vaccination.getDate(), is(equalTo(date)));
}
@Test(expected = NullPointerException.class)
public void testSetDateNull() {
vaccination.setDate(null);
}
@Test
public void testSetAndGetPet() {
vaccination.setPet(pet);
assertThat(vaccination.getPet(), is(equalTo(pet)));
assertThat(pet.getVaccinations(), hasItem(vaccination));
}
@Test
public void testChangePet() {
Pet pet2 = new Pet("Luna", AnimalType.CAT, new Date(), null);
vaccination.setPet(pet);
vaccination.setPet(pet2);
assertThat(pet.getVaccinations(), not(hasItem(vaccination)));
assertThat(pet2.getVaccinations(), hasItem(vaccination));
}
@Test
public void testSetAndGetVaccine() {
vaccination.setVaccine(vaccine);
assertThat(vaccination.getVaccine(), is(equalTo(vaccine)));
}
}*/
domain/src/test/java/es/uvigo/esei/xcs/domain/entities/VaccineTest.java
0 → 100644
View file @
4190697b
/*package es.uvigo.esei.xcs.domain.entities;
import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.collection.IsEmptyCollection.empty;
import org.junit.Before;
import org.junit.Test;
public class VaccineTest {
private Vaccine vaccine;
private Vaccination vaccination;
@Before
public void setUp() {
vaccine = new Vaccine("Rabies");
vaccination = new Vaccination();
}
@Test
public void testConstructorAndGetName() {
assertThat(vaccine.getName(), is("Rabies"));
assertThat(vaccine.getVaccinations(), is(empty()));
}
@Test
public void testSetName() {
vaccine.setName("Distemper");
assertThat(vaccine.getName(), is("Distemper"));
}
@Test
public void testAddVaccination() {
vaccine.addVaccination(vaccination);
assertThat(vaccination.getVaccine(), is(vaccine));
}
@Test(expected = NullPointerException.class)
public void testAddVaccinationNull() {
vaccine.addVaccination(null);
}
@Test
public void testRemoveVaccination() {
vaccine.addVaccination(vaccination);
vaccine.removeVaccination(vaccination);
assertThat(vaccination.getVaccine(), is(nullValue()));
}
@Test(expected = NullPointerException.class)
public void testRemoveVaccinationNull() {
vaccine.removeVaccination(null);
}
@Test
public void testOwnsVaccination() {
vaccine.internalAddVaccination(vaccination);
assertThat(vaccine.ownsVaccination(vaccination), is(true));
}
@Test
public void testInternalRemoveVaccination() {
vaccine.internalAddVaccination(vaccination);
vaccine.internalRemoveVaccination(vaccination);
assertThat(vaccine.getVaccinations(), is(empty()));
}
}*/
domain/src/test/java/es/uvigo/esei/xcs/domain/entities/VetTest.java
0 → 100644
View file @
4190697b
/*package es.uvigo.esei.xcs.domain.entities;
import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.MatcherAssert.assertThat;
import java.util.Date;
import org.junit.Before;
import org.junit.Test;
public class VetTest extends UserTest{
private Vet vet;
private Owner owner;
private Pet pet;
@Before
public void setUp() {
owner = new Owner("juan", "123456");
vet = new Vet("drsmith", "vetpass");
pet = new Pet("Lassie", AnimalType.DOG, new Date(), owner);
}
@Test
public void testAddAndRemovePet() {
vet.addPet(pet);
vet.internalAddPet(pet);
assertThat(vet.ownsPet(pet), is(true));
assertThat(pet.ownsVet(vet), is(true));
vet.removePet(pet);
vet.internalRemovePet(pet);
assertThat(vet.ownsPet(pet), is(false));
assertThat(pet.ownsVet(vet), is(false));
}
@Test(expected = NullPointerException.class)
public void testAddPetNull() {
vet.addPet(null);
}
@Test(expected = NullPointerException.class)
public void testRemovePetNull() {
vet.removePet(null);
}
@Test(expected = IllegalArgumentException.class)
public void testRemovePetNotOwned() {
vet.removePet(pet);
}
@Override
protected User newUser(String login, String password) {
return new Vet(login, password);
}
}*/
jsf/src/main/java/es/uvigo/esei/xcs/jsf/OwnerManagedBean.java
View file @
4190697b
...
...
@@ -16,7 +16,7 @@ import es.uvigo.esei.xcs.service.OwnerService;
@Named
(
"owner"
)
@RequestScoped
public
class
OwnerManagedBean
{
@Inject
/*
@Inject
private OwnerService service;
private String login;
...
...
@@ -121,5 +121,5 @@ public class OwnerManagedBean {
private String getViewId() {
return FacesContext.getCurrentInstance().getViewRoot().getViewId();
}
}
*/
}
jsf/src/main/java/es/uvigo/esei/xcs/jsf/PetManagedBean.java
View file @
4190697b
...
...
@@ -16,7 +16,7 @@ import es.uvigo.esei.xcs.service.PetService;
@Named
(
"pet"
)
@RequestScoped
public
class
PetManagedBean
{
@Inject
/*
@Inject
private PetService service;
private String name;
...
...
@@ -137,5 +137,5 @@ public class PetManagedBean {
private String getViewId() {
return FacesContext.getCurrentInstance().getViewRoot().getViewId();
}
}
*/
}
jsf/src/main/java/es/uvigo/esei/xcs/jsf/VaccineManagedBean.java
0 → 100644
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
jsf
;
import
java.util.List
;
import
javax.annotation.PostConstruct
;
import
javax.ejb.EJB
;
import
javax.enterprise.context.RequestScoped
;
import
javax.inject.Named
;
import
es.uvigo.esei.xcs.domain.entities.Vaccine
;
import
es.uvigo.esei.xcs.service.VaccineService
;
@Named
(
"vaccine"
)
@RequestScoped
public
class
VaccineManagedBean
{
@EJB
private
VaccineService
vaccineService
;
private
List
<
Vaccine
>
vaccines
;
private
String
name
;
private
String
type
;
private
Integer
doses
;
private
Integer
periode
;
private
String
periodicType
;
@PostConstruct
public
void
init
()
{
vaccines
=
vaccineService
.
list
(
0
,
100
);
}
public
void
createVaccine
()
{
vaccineService
.
create
(
name
,
type
,
doses
,
periodicType
,
periode
);
vaccines
=
vaccineService
.
list
(
0
,
100
);
clearForm
();
}
public
void
removeVaccine
(
Long
id
)
{
vaccineService
.
remove
(
id
);
vaccines
=
vaccineService
.
list
(
0
,
100
);
}
private
void
clearForm
()
{
name
=
null
;
type
=
null
;
doses
=
null
;
periode
=
null
;
periodicType
=
null
;
}
// Getters y setters
public
List
<
Vaccine
>
getVaccines
()
{
return
vaccines
;
}
public
String
getName
()
{
return
name
;
}
public
void
setName
(
String
name
)
{
this
.
name
=
name
;
}
public
String
getType
()
{
return
type
;
}
public
void
setType
(
String
type
)
{
this
.
type
=
type
;
}
public
Integer
getDoses
()
{
return
doses
;
}
public
void
setDoses
(
Integer
doses
)
{
this
.
doses
=
doses
;
}
public
Integer
getPeriode
()
{
return
periode
;
}
public
void
setPeriode
(
Integer
periode
)
{
this
.
periode
=
periode
;
}
public
String
getPeriodicType
()
{
return
periodicType
;
}
public
void
setPeriodicType
(
String
periodicType
)
{
this
.
periodicType
=
periodicType
;
}
}
jsf/src/main/java/es/uvigo/esei/xcs/jsf/VetManagedBean.java
0 → 100644
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
jsf
;
import
static
java
.
util
.
stream
.
Collectors
.
joining
;
import
java.util.List
;
import
javax.enterprise.context.RequestScoped
;
import
javax.faces.context.FacesContext
;
import
javax.inject.Inject
;
import
javax.inject.Named
;
import
es.uvigo.esei.xcs.domain.entities.Pet
;
import
es.uvigo.esei.xcs.domain.entities.Vet
;
import
es.uvigo.esei.xcs.service.VetService
;
@Named
(
"vet"
)
@RequestScoped
public
class
VetManagedBean
{
@Inject
private
VetService
service
;
private
String
login
;
private
String
password
;
private
boolean
editing
;
private
String
errorMessage
;
public
String
getLogin
()
{
return
login
;
}
public
void
setLogin
(
String
login
)
{
this
.
login
=
login
;
}
public
String
getPassword
()
{
return
password
;
}
public
void
setPassword
(
String
password
)
{
this
.
password
=
password
;
}
public
boolean
isEditing
()
{
return
editing
;
}
public
void
setEditing
(
boolean
editing
)
{
this
.
editing
=
editing
;
}
public
String
getErrorMessage
()
{
return
errorMessage
;
}
public
boolean
isError
()
{
return
this
.
errorMessage
!=
null
;
}
public
List
<
Vet
>
getVets
()
{
return
this
.
service
.
list
();
}
public
String
getPetNames
(
String
login
)
{
return
this
.
service
.
getPets
(
login
,
0
,
100
).
stream
()
.
map
(
Pet:
:
getName
)
.
collect
(
joining
(
", "
));
}
public
String
edit
(
String
login
)
{
this
.
editing
=
true
;
this
.
login
=
login
;
return
this
.
getViewId
();
}
public
String
cancelEditing
()
{
this
.
clear
();
return
this
.
getViewId
();
}
public
String
remove
(
String
login
)
{
this
.
service
.
remove
(
login
);
return
redirectTo
(
this
.
getViewId
());
}
public
String
store
()
{
try
{
if
(
this
.
isEditing
())
{
final
Vet
vet
=
this
.
service
.
get
(
this
.
login
);
vet
.
setPassword
(
this
.
password
);
this
.
service
.
update
(
vet
);
}
else
{
final
Vet
vet
=
new
Vet
();
vet
.
setLogin
(
this
.
login
);
vet
.
setPassword
(
this
.
password
);
this
.
service
.
create
(
vet
);
}
this
.
clear
();
return
redirectTo
(
this
.
getViewId
());
}
catch
(
Throwable
t
)
{
this
.
errorMessage
=
t
.
getMessage
();
return
this
.
getViewId
();
}
}
private
void
clear
()
{
this
.
login
=
null
;
this
.
password
=
null
;
this
.
editing
=
false
;
this
.
errorMessage
=
null
;
}
private
String
redirectTo
(
String
url
)
{
return
url
+
"?faces-redirect=true"
;
}
private
String
getViewId
()
{
return
FacesContext
.
getCurrentInstance
().
getViewRoot
().
getViewId
();
}
}
jsf/src/main/webapp/vet/vaccines.xhtml
0 → 100644
View file @
4190697b
<!DOCTYPE html>
<html
xmlns=
"http://www.w3.org/1999/xhtml"
xmlns:h=
"http://xmlns.jcp.org/jsf/html"
xmlns:f=
"http://xmlns.jcp.org/jsf/core"
xmlns:ui=
"http://xmlns.jcp.org/jsf/facelets"
>
<h:head>
<title>
Gestión de Vacunas
</title>
</h:head>
<h:body>
<h2>
CRUD de Vacunas
</h2>
<!-- Tabla de vacunas -->
<h:dataTable
value=
"#{vaccine.vaccines}"
var=
"v"
border=
"1"
>
<h:column><f:facet
name=
"header"
>
ID
</f:facet>
#{v.id}
</h:column>
<h:column><f:facet
name=
"header"
>
Nombre
</f:facet>
#{v.name}
</h:column>
<h:column><f:facet
name=
"header"
>
Tipo
</f:facet>
#{v.class.simpleName}
</h:column>
<h:column
rendered=
"#{v.class.simpleName eq 'MultidoseVaccine'}"
>
<f:facet
name=
"header"
>
Doses
</f:facet>
#{v.doses}
</h:column>
<h:column
rendered=
"#{v.class.simpleName eq 'PeriodicVaccine'}"
>
<f:facet
name=
"header"
>
Periode
</f:facet>
#{v.periode}
</h:column>
<h:column
rendered=
"#{v.class.simpleName eq 'PeriodicVaccine'}"
>
<f:facet
name=
"header"
>
PeriodicType
</f:facet>
#{v.periodicType}
</h:column>
<h:column>
<f:facet
name=
"header"
>
Acciones
</f:facet>
<h:form>
<h:commandButton
value=
"Eliminar"
action=
"#{vaccine.removeVaccine(v.id)}"
onclick=
"return confirm('¿Seguro que deseas eliminar esta vacuna?');"
/>
</h:form>
</h:column>
</h:dataTable>
<hr/>
<!-- Formulario para añadir vacuna -->
<h:form>
<h3>
Añadir nueva vacuna
</h3>
<h:panelGrid
columns=
"2"
cellpadding=
"5"
>
<h:outputLabel
value=
"Nombre:"
for=
"name"
/>
<h:inputText
id=
"name"
value=
"#{vaccine.name}"
required=
"true"
/>
<h:outputLabel
value=
"Tipo:"
for=
"type"
/>
<h:selectOneMenu
id=
"type"
value=
"#{vaccine.type}"
>
<f:selectItem
itemLabel=
"Seleccione..."
itemValue=
""
/>
<f:selectItem
itemLabel=
"MONODOSE"
itemValue=
"MONODOSE"
/>
<f:selectItem
itemLabel=
"MULTIDOSE"
itemValue=
"MULTIDOSE"
/>
<f:selectItem
itemLabel=
"PERIODIC"
itemValue=
"PERIODIC"
/>
<f:ajax
render=
"doses periode periodicType"
/>
</h:selectOneMenu>
<!-- Doses solo si MULTIDOSE -->
<h:outputLabel
value=
"Doses:"
for=
"doses"
rendered=
"#{vaccine.type eq 'MULTIDOSE'}"
/>
<h:inputText
id=
"doses"
value=
"#{vaccine.doses}"
rendered=
"#{vaccine.type eq 'MULTIDOSE'}"
required=
"#{vaccine.type eq 'MULTIDOSE'}"
validatorMessage=
"Las dosis deben ser mayores a 0"
>
<f:validateLongRange
minimum=
"1"
/>
</h:inputText>
<!-- Periode y PeriodicType solo si PERIODIC -->
<h:outputLabel
value=
"Periode:"
for=
"periode"
rendered=
"#{vaccine.type eq 'PERIODIC'}"
/>
<h:inputText
id=
"periode"
value=
"#{vaccine.periode}"
rendered=
"#{vaccine.type eq 'PERIODIC'}"
required=
"#{vaccine.type eq 'PERIODIC'}"
validatorMessage=
"El periodo debe ser mayor a 0"
>
<f:validateLongRange
minimum=
"1"
/>
</h:inputText>
<h:outputLabel
value=
"Periodic Type:"
for=
"periodicType"
rendered=
"#{vaccine.type eq 'PERIODIC'}"
/>
<h:selectOneMenu
id=
"periodicType"
value=
"#{vaccine.periodicType}"
rendered=
"#{vaccine.type eq 'PERIODIC'}"
>
<f:selectItem
itemLabel=
"DAYS"
itemValue=
"DAYS"
/>
<f:selectItem
itemLabel=
"MONTHS"
itemValue=
"MONTHS"
/>
<f:selectItem
itemLabel=
"YEARS"
itemValue=
"YEARS"
/>
</h:selectOneMenu>
</h:panelGrid>
<br/>
<h:commandButton
value=
"Crear Vacuna"
action=
"#{vaccine.createVaccine}"
/>
</h:form>
</h:body>
</html>
jsf/src/main/webapp/vet/vets.xhtml
0 → 100644
View file @
4190697b
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns=
"http://www.w3.org/1999/xhtml"
xmlns:h=
"http://xmlns.jcp.org/jsf/html"
xmlns:f=
"http://xmlns.jcp.org/jsf/core"
xmlns:ui=
"http://xmlns.jcp.org/jsf/facelets"
xmlns:a=
"http://xmlns.jcp.org/jsf/passthrough"
>
<head>
<title>
Pet Store - Vets
</title>
</head>
<body>
<ui:composition
template=
"../WEB-INF/template.xhtml"
>
<ui:define
name=
"jumbotron"
>
<h2>
Vet
</h2>
<h:panelGroup
class=
"row"
>
<h:form
id=
"vet-form"
>
<h:outputLabel
for=
"login-field"
>
Login
</h:outputLabel>
<h:inputText
id=
"login-field"
class=
"form-control"
a:placeholder=
"Vet login"
value=
"#{vet.login}"
readonly=
"#{vet.editing}"
/>
<h:outputLabel
for=
"password-field"
>
Password
</h:outputLabel>
<h:inputSecret
id=
"password-field"
class=
"form-control"
a:placeholder=
"Vet password"
value=
"#{vet.password}"
/>
<h:inputHidden
id=
"editing"
value=
"#{vet.editing}"
/>
<h:commandButton
id=
"submit-button"
class=
"btn btn-default"
value=
"Store"
action=
"#{vet.store()}"
/>
<h:commandButton
id=
"cancel-button"
class=
"btn btn-default"
value=
"Cancel"
action=
"#{vet.cancelEditing()}"
/>
</h:form>
</h:panelGroup>
<div
class=
"row"
>
<h:panelGroup
id=
"store-error"
class=
"alert alert-danger"
role=
"alert"
rendered=
"#{vet.error}"
>
<span
class=
"glyphicon glyphicon-exclamation-sign"
aria-hidden=
"true"
></span>
Error: #{vet.errorMessage}
</h:panelGroup>
</div>
</ui:define>
<ui:define
name=
"content"
>
<h:dataTable
id=
"vets-table"
value=
"#{vet.vets}"
var=
"vetEntity"
styleClass=
"table table-striped table-bordered"
columnClasses=
"vets-table-login,vets-table-password,vets-table-pets,vets-table-options"
>
<h:column>
<f:facet
name=
"header"
>
Login
</f:facet>
#{vetEntity.login}
</h:column>
<h:column>
<f:facet
name=
"header"
>
Password
</f:facet>
#{vetEntity.password}
</h:column>
<h:column>
<f:facet
name=
"header"
>
Pets
</f:facet>
#{vet.getPetNames(vetEntity.login)}
</h:column>
<h:column>
<h:form>
<h:commandButton
class=
"vets-table-remove"
value=
"Remove"
action=
"#{vet.remove(vetEntity.login)}"
/>
<h:commandButton
class=
"vets-table-edit"
value=
"Edit"
action=
"#{vet.edit(vetEntity.login)}"
/>
</h:form>
</h:column>
</h:dataTable>
</ui:define>
</ui:composition>
</body>
</html>
jsf/src/test/java/es/uvigo/esei/xcs/jsf/JsfIntegrationTestSuite.java
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
jsf
;
/*
package es.uvigo.esei.xcs.jsf;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
...
...
@@ -10,3 +10,4 @@ import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
public class JsfIntegrationTestSuite {
}
*/
\ No newline at end of file
jsf/src/test/java/es/uvigo/esei/xcs/jsf/OwnerJsfTest.java
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
jsf
;
/*
package es.uvigo.esei.xcs.jsf;
import static es.uvigo.esei.xcs.domain.entities.OwnersDataset.existentLogin;
import static es.uvigo.esei.xcs.domain.entities.OwnersDataset.existentOwner;
...
...
@@ -346,4 +346,4 @@ public class OwnerJsfTest {
ownersPage.assertOnOwnersPage();
}
}
}
*/
pom.xml
View file @
4190697b
...
...
@@ -78,6 +78,11 @@
<dependencyManagement>
<dependencies>
<!-- BOM -->
<dependency>
<groupId>
javax
</groupId>
...
...
rest/src/main/java/es/uvigo/esei/xcs/rest/AdministratorResource.java
0 → 100644
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
rest
;
import
javax.ejb.EJB
;
import
javax.ws.rs.Consumes
;
import
javax.ws.rs.GET
;
import
javax.ws.rs.Path
;
import
javax.ws.rs.Produces
;
import
javax.ws.rs.QueryParam
;
import
javax.ws.rs.core.MediaType
;
import
javax.ws.rs.core.Response
;
import
es.uvigo.esei.xcs.service.AdministratorService
;
@Path
(
"administrator"
)
@Consumes
(
MediaType
.
APPLICATION_JSON
)
@Produces
(
MediaType
.
APPLICATION_JSON
)
public
class
AdministratorResource
{
@EJB
AdministratorService
service
;
@GET
public
Response
list
(
@QueryParam
(
"page"
)
int
page
,
@QueryParam
(
"pageSize"
)
int
pageSize
)
{
return
Response
.
ok
(
this
.
service
.
list
(
page
,
pageSize
)).
build
();
}
}
rest/src/main/java/es/uvigo/esei/xcs/rest/OwnerResource.java
View file @
4190697b
...
...
@@ -2,6 +2,7 @@ package es.uvigo.esei.xcs.rest;
import
java.net.URI
;
import
javax.ejb.EJB
;
import
javax.persistence.EntityExistsException
;
import
javax.ws.rs.Consumes
;
...
...
@@ -12,15 +13,18 @@ import javax.ws.rs.PUT;
import
javax.ws.rs.Path
;
import
javax.ws.rs.PathParam
;
import
javax.ws.rs.Produces
;
import
javax.ws.rs.QueryParam
;
import
javax.ws.rs.core.Context
;
import
javax.ws.rs.core.MediaType
;
import
javax.ws.rs.core.Response
;
import
javax.ws.rs.core.UriInfo
;
import
es.uvigo.esei.xcs.domain.entities.IdentifierType
;
import
es.uvigo.esei.xcs.domain.entities.Owner
;
import
es.uvigo.esei.xcs.rest.entity.OwnerEditionData
;
import
es.uvigo.esei.xcs.rest.entity.OwnerCreationData
;
import
es.uvigo.esei.xcs.service.OwnerService
;
import
static
java
.
util
.
Objects
.
requireNonNull
;
/**
* Resource that represents the owners in the application.
...
...
@@ -46,8 +50,8 @@ public class OwnerResource {
* @throws IllegalArgumentException if {@code login} is {@code null} or
* if it does not correspond with any owner.
*/
@Path
(
"{login}"
)
@GET
@Path
(
"{login}"
)
public
Response
get
(
@PathParam
(
"login"
)
String
login
)
{
if
(
login
==
null
)
throw
new
IllegalArgumentException
(
"login can't be null"
);
...
...
@@ -67,8 +71,8 @@ public class OwnerResource {
* the application.
*/
@GET
public
Response
list
()
{
return
Response
.
ok
(
this
.
service
.
list
()).
build
();
public
Response
list
(
@QueryParam
(
"page"
)
int
page
,
@QueryParam
(
"pageSize"
)
int
pageSize
)
{
return
Response
.
ok
(
this
.
service
.
list
(
page
,
pageSize
)).
build
();
}
/**
...
...
@@ -110,19 +114,11 @@ public class OwnerResource {
@Path
(
"{login}"
)
@PUT
public
Response
update
(
@PathParam
(
"login"
)
String
login
,
OwnerEditionData
ownerData
)
{
if
(
login
==
null
)
{
throw
new
IllegalArgumentException
(
"login can't be null"
);
}
if
(
ownerData
==
null
)
{
throw
new
IllegalArgumentException
(
"ownerData can't be null"
);
}
requireNonNull
(
login
,
"login can't be null"
);
requireNonNull
(
ownerData
,
"ownerData can't be null"
);
final
Owner
owner
=
this
.
service
.
get
(
login
);
ownerData
.
assignData
(
owner
);
this
.
service
.
update
(
owner
);
return
Response
.
ok
().
build
();
}
...
...
@@ -139,9 +135,28 @@ public class OwnerResource {
public
Response
delete
(
@PathParam
(
"login"
)
String
login
)
{
if
(
login
==
null
)
throw
new
IllegalArgumentException
(
"login can't be null"
);
this
.
service
.
remove
(
login
);
return
Response
.
ok
().
build
();
}
@Path
(
"{login}/pet/{petIdentifierType}/{petIdentifierValue}/vaccination"
)
@GET
public
Response
listVaccinations
(
@PathParam
(
"login"
)
String
login
,
@PathParam
(
"petIdentifierType"
)
IdentifierType
petIdentifierType
,
@PathParam
(
"petIdentifierValue"
)
String
petIdentifierValue
,
@QueryParam
(
"page"
)
int
page
,
@QueryParam
(
"pageSize"
)
int
pageSize
)
{
return
Response
.
ok
(
this
.
service
.
getVaccinationsFromOwnPet
(
login
,
petIdentifierType
,
petIdentifierValue
,
page
,
pageSize
)).
build
();
}
}
rest/src/main/java/es/uvigo/esei/xcs/rest/PetResource.java
View file @
4190697b
...
...
@@ -13,6 +13,7 @@ import javax.ws.rs.PUT;
import
javax.ws.rs.Path
;
import
javax.ws.rs.PathParam
;
import
javax.ws.rs.Produces
;
import
javax.ws.rs.QueryParam
;
import
javax.ws.rs.core.Context
;
import
javax.ws.rs.core.MediaType
;
import
javax.ws.rs.core.Response
;
...
...
@@ -47,7 +48,7 @@ public class PetResource {
*/
@Path
(
"{id}"
)
@GET
public
Response
get
(
@PathParam
(
"id"
)
int
id
)
throws
SecurityException
{
public
Response
get
(
@PathParam
(
"id"
)
Long
id
)
throws
SecurityException
{
try
{
final
Pet
pet
=
this
.
service
.
get
(
id
);
...
...
@@ -67,8 +68,8 @@ public class PetResource {
* the current owner.
*/
@GET
public
Response
list
()
{
return
Response
.
ok
(
this
.
service
.
list
()).
build
();
public
Response
list
(
@QueryParam
(
"page"
)
int
page
,
@QueryParam
(
"pageSize"
)
int
pageSize
)
{
return
Response
.
ok
(
this
.
service
.
list
(
page
,
pageSize
)).
build
();
}
/**
...
...
@@ -92,7 +93,7 @@ public class PetResource {
final
Pet
pet
=
this
.
service
.
create
(
petData
.
toPet
());
final
URI
petUri
=
uriInfo
.
getAbsolutePathBuilder
()
.
path
(
Integer
.
toString
(
pet
.
getId
()))
.
path
(
String
.
valueOf
(
pet
.
getId
()))
.
build
();
return
Response
.
created
(
petUri
).
build
();
...
...
@@ -116,7 +117,7 @@ public class PetResource {
*/
@Path
(
"{id}"
)
@PUT
public
Response
update
(
@PathParam
(
"id"
)
int
id
,
PetData
petData
)
throws
SecurityException
{
public
Response
update
(
@PathParam
(
"id"
)
Long
id
,
PetData
petData
)
throws
SecurityException
{
if
(
petData
==
null
)
throw
new
IllegalArgumentException
(
"pet can't be null"
);
...
...
@@ -143,7 +144,7 @@ public class PetResource {
*/
@Path
(
"{id}"
)
@DELETE
public
Response
delete
(
@PathParam
(
"id"
)
int
id
)
throws
SecurityException
{
public
Response
delete
(
@PathParam
(
"id"
)
Long
id
)
throws
SecurityException
{
try
{
this
.
service
.
remove
(
id
);
...
...
rest/src/main/java/es/uvigo/esei/xcs/rest/VaccineResource.java
0 → 100644
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
rest
;
import
static
java
.
util
.
Objects
.
requireNonNull
;
import
java.net.URI
;
import
javax.ejb.EJB
;
import
javax.ws.rs.*
;
import
javax.ws.rs.core.*
;
import
es.uvigo.esei.xcs.domain.entities.Vaccine
;
import
es.uvigo.esei.xcs.rest.entity.VaccineCreationData
;
import
es.uvigo.esei.xcs.rest.entity.VaccineEditionData
;
import
es.uvigo.esei.xcs.service.VaccineService
;
@Path
(
"vaccine"
)
@Consumes
(
MediaType
.
APPLICATION_JSON
)
@Produces
(
MediaType
.
APPLICATION_JSON
)
public
class
VaccineResource
{
@EJB
private
VaccineService
vaccineService
;
@Context
private
UriInfo
uriInfo
;
@GET
public
Response
list
(
@QueryParam
(
"page"
)
@DefaultValue
(
"0"
)
int
page
,
@QueryParam
(
"pageSize"
)
@DefaultValue
(
"10"
)
int
pageSize
)
{
return
Response
.
ok
(
vaccineService
.
list
(
page
,
pageSize
)).
build
();
}
@POST
public
Response
create
(
VaccineCreationData
vaccineData
)
{
requireNonNull
(
vaccineData
,
"vaccineData can't be null"
);
//Vaccine vaccine = vaccineService.create(vaccineData.toVaccine());
Vaccine
vaccine
=
vaccineService
.
create
(
vaccineData
.
getName
(),
vaccineData
.
getType
(),
vaccineData
.
getDoses
(),
vaccineData
.
getPeriodicType
(),
vaccineData
.
getPeriode
()
);
URI
uri
=
uriInfo
.
getAbsolutePathBuilder
().
path
(
String
.
valueOf
(
vaccine
.
getId
())).
build
();
return
Response
.
created
(
uri
).
build
();
}
@PUT
@Path
(
"{id}"
)
public
Response
update
(
@PathParam
(
"id"
)
Long
id
,
VaccineEditionData
vaccineData
)
{
requireNonNull
(
vaccineData
,
"vaccineData can't be null"
);
Vaccine
vaccine
=
vaccineService
.
get
(
id
);
vaccineData
.
assignData
(
vaccine
);
vaccineService
.
update
(
vaccine
);
return
Response
.
ok
().
build
();
}
@DELETE
@Path
(
"{id}"
)
public
Response
delete
(
@PathParam
(
"id"
)
Long
id
)
{
vaccineService
.
remove
(
id
);
return
Response
.
ok
().
build
();
}
}
rest/src/main/java/es/uvigo/esei/xcs/rest/VetResource.java
0 → 100644
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
rest
;
import
static
java
.
util
.
Objects
.
requireNonNull
;
import
java.net.URI
;
import
java.util.Date
;
import
javax.ejb.EJB
;
import
javax.ejb.EJBAccessException
;
import
javax.ws.rs.Consumes
;
import
javax.ws.rs.DELETE
;
import
javax.ws.rs.DefaultValue
;
import
javax.ws.rs.GET
;
import
javax.ws.rs.POST
;
import
javax.ws.rs.PUT
;
import
javax.ws.rs.Path
;
import
javax.ws.rs.PathParam
;
import
javax.ws.rs.Produces
;
import
javax.ws.rs.QueryParam
;
import
javax.ws.rs.core.Context
;
import
javax.ws.rs.core.MediaType
;
import
javax.ws.rs.core.Response
;
import
javax.ws.rs.core.UriInfo
;
import
es.uvigo.esei.xcs.domain.entities.IdentifierType
;
import
es.uvigo.esei.xcs.domain.entities.Vaccination
;
import
es.uvigo.esei.xcs.domain.entities.Vaccine
;
import
es.uvigo.esei.xcs.domain.entities.Vet
;
import
es.uvigo.esei.xcs.rest.entity.VaccinationCreationData
;
import
es.uvigo.esei.xcs.rest.entity.VaccineCreationData
;
import
es.uvigo.esei.xcs.rest.entity.VaccineEditionData
;
import
es.uvigo.esei.xcs.rest.entity.VetData
;
import
es.uvigo.esei.xcs.service.PetService
;
import
es.uvigo.esei.xcs.service.VaccinationService
;
import
es.uvigo.esei.xcs.service.VaccineService
;
import
es.uvigo.esei.xcs.service.VetService
;
@Path
(
"vet"
)
@Consumes
(
MediaType
.
APPLICATION_JSON
)
@Produces
(
MediaType
.
APPLICATION_JSON
)
public
class
VetResource
{
@EJB
private
VetService
vetService
;
@EJB
private
PetService
petService
;
@EJB
private
VaccineService
vaccineService
;
@EJB
private
VaccinationService
vaccinationService
;
@Context
private
UriInfo
uriInfo
;
@GET
@Path
(
"{login}"
)
public
Response
get
(
@PathParam
(
"login"
)
String
login
)
{
return
Response
.
ok
(
vetService
.
get
(
login
)).
build
();
}
@GET
public
Response
list
()
{
return
Response
.
ok
(
vetService
.
list
()).
build
();
}
@POST
public
Response
create
(
VetData
vetData
)
{
requireNonNull
(
vetData
);
try
{
final
Vet
vet
=
this
.
vetService
.
create
(
vetData
.
toVet
());
final
URI
vetUri
=
uriInfo
.
getAbsolutePathBuilder
()
.
path
(
vet
.
getLogin
()).
build
();
return
Response
.
created
(
vetUri
).
build
();
}
catch
(
Exception
e
)
{
throw
new
SecurityException
(
e
);
}
}
@Path
(
"{login}"
)
@DELETE
public
Response
delete
(
@PathParam
(
"login"
)
String
login
)
{
try
{
this
.
vetService
.
remove
(
login
);
return
Response
.
ok
().
build
();
}
catch
(
EJBAccessException
e
)
{
throw
new
SecurityException
(
e
);
}
}
@GET
@Path
(
"{login}/pet"
)
public
Response
listPets
(
@PathParam
(
"login"
)
String
login
,
@QueryParam
(
"page"
)
@DefaultValue
(
"0"
)
int
page
,
@QueryParam
(
"pageSize"
)
@DefaultValue
(
"10"
)
int
pageSize
)
{
requireNonNull
(
login
,
"login can't be null"
);
return
Response
.
ok
(
this
.
vetService
.
getPets
(
login
,
page
,
pageSize
)).
build
();
}
@GET
@Path
(
"pet/{petId}"
)
public
Response
getPet
(
@PathParam
(
"petId"
)
Long
petId
)
{
return
Response
.
ok
(
this
.
petService
.
get
(
petId
)).
build
();
}
@GET
@Path
(
"vaccine"
)
public
Response
listVaccines
(
@QueryParam
(
"page"
)
int
page
,
@QueryParam
(
"pageSize"
)
int
pageSize
)
{
return
Response
.
ok
(
this
.
vaccineService
.
list
(
page
,
pageSize
)).
build
();
}
@Path
(
"vaccine"
)
@POST
public
Response
createVaccine
(
VaccineCreationData
vaccineData
)
{
Vaccine
vaccine
=
null
;
//this.vaccineService.create(vaccineData.toVaccine());
return
Response
.
ok
(
vaccine
).
build
();
}
@Path
(
"vaccine/{id}"
)
@PUT
public
Response
updateVaccine
(
@PathParam
(
"id"
)
Long
id
,
VaccineEditionData
vaccineData
)
{
if
(
vaccineData
==
null
)
{
throw
new
IllegalArgumentException
(
"vaccineData can't be null"
);
}
final
Vaccine
vaccine
=
this
.
vaccineService
.
get
(
id
);
vaccineData
.
assignData
(
vaccine
);
this
.
vaccineService
.
update
(
vaccine
);
return
Response
.
ok
().
build
();
}
@Path
(
"vaccine/{id}"
)
@DELETE
public
Response
deleteVaccine
(
@PathParam
(
"id"
)
Long
id
)
{
try
{
this
.
vaccineService
.
remove
(
id
);
return
Response
.
ok
().
build
();
}
catch
(
EJBAccessException
e
)
{
throw
new
SecurityException
(
e
);
}
}
@Path
(
"{login}/pet/{petIdentifierType}/{petIdentifierValue}/vaccination"
)
@GET
public
Response
listVaccinations
(
@PathParam
(
"login"
)
String
login
,
@PathParam
(
"petIdentifierType"
)
IdentifierType
petIdentifierType
,
@PathParam
(
"petIdentifierValue"
)
String
petIdentifierValue
,
@QueryParam
(
"page"
)
int
page
,
@QueryParam
(
"pageSize"
)
int
pageSize
)
{
requireNonNull
(
login
,
"login can't be null"
);
return
Response
.
ok
(
this
.
vetService
.
getVaccinationsFromOwnPet
(
login
,
petIdentifierType
,
petIdentifierValue
,
page
,
pageSize
)).
build
();
}
@Path
(
"/pet/{petIdentifierType}/{petIdentifierValue}/vaccination"
)
@POST
public
Response
registerVaccination
(
@QueryParam
(
"date"
)
String
date
,
VaccinationCreationData
vaccinationData
)
{
Vaccination
vaccination
=
this
.
vaccinationService
.
create
(
vaccinationData
.
getPetId
().
intValue
(),
vaccinationData
.
getVaccineId
().
intValue
(),
date
);
final
URI
vaccinationUri
=
uriInfo
.
getAbsolutePathBuilder
()
.
path
(
String
.
valueOf
(
vaccination
.
getId
())).
build
();
return
Response
.
created
(
vaccinationUri
).
build
();
}
@POST
@Path
(
"/assign/pet/{petId}"
)
public
Response
assignVetToPet
(
//@PathParam("login") String vetLogin,
@PathParam
(
"petId"
)
Long
petId
)
{
//requireNonNull(vetLogin, "vetLogin can't be null");
requireNonNull
(
petId
,
"petId can't be null"
);
try
{
petService
.
assignVetToPet
(
petId
);
return
Response
.
ok
()
//.entity("Vet " + vetLogin + " assigned to pet " + petId)
.
build
();
}
catch
(
IllegalArgumentException
e
)
{
return
Response
.
status
(
Response
.
Status
.
NOT_FOUND
)
.
entity
(
e
.
getMessage
())
.
build
();
}
}
@DELETE
@Path
(
"{login}/unassign/pet/{petId}"
)
public
Response
unassignVetFromPet
(
@PathParam
(
"login"
)
String
vetLogin
,
@PathParam
(
"petId"
)
Long
petId
)
{
requireNonNull
(
vetLogin
,
"vetLogin can't be null"
);
requireNonNull
(
petId
,
"petId can't be null"
);
try
{
petService
.
unassignVetFromPet
(
petId
,
vetLogin
);
return
Response
.
ok
()
.
entity
(
"Vet "
+
vetLogin
+
" unassigned from pet "
+
petId
)
.
build
();
}
catch
(
IllegalArgumentException
e
)
{
return
Response
.
status
(
Response
.
Status
.
NOT_FOUND
)
.
entity
(
e
.
getMessage
())
.
build
();
}
}
}
rest/src/main/java/es/uvigo/esei/xcs/rest/entity/PetBasicProjection.java
0 → 100644
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
rest
.
entity
;
import
es.uvigo.esei.xcs.domain.entities.AnimalType
;
public
class
PetBasicProjection
{
private
final
String
name
;
private
final
AnimalType
animal
;
public
PetBasicProjection
(
String
name
,
AnimalType
animal
)
{
this
.
name
=
name
;
this
.
animal
=
animal
;
}
public
String
getName
()
{
return
name
;
}
public
AnimalType
getAnimal
()
{
return
animal
;
}
}
rest/src/main/java/es/uvigo/esei/xcs/rest/entity/PetData.java
View file @
4190697b
...
...
@@ -42,7 +42,7 @@ public class PetData implements Serializable {
}
public
Pet
toPet
()
{
return
new
Pet
(
this
.
name
,
this
.
animal
,
this
.
birth
);
return
new
Pet
(
this
.
name
,
this
.
animal
,
this
.
birth
,
null
);
}
}
rest/src/main/java/es/uvigo/esei/xcs/rest/entity/VaccinationCreationData.java
0 → 100644
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
rest
.
entity
;
import
java.io.Serializable
;
public
class
VaccinationCreationData
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
private
Long
petId
;
private
Long
vaccineId
;
VaccinationCreationData
()
{}
public
VaccinationCreationData
(
Long
petId
,
Long
vaccineId
)
{
this
.
petId
=
petId
;
this
.
vaccineId
=
vaccineId
;
}
public
Long
getPetId
()
{
return
this
.
petId
;
}
public
Long
getVaccineId
()
{
return
this
.
vaccineId
;
}
}
rest/src/main/java/es/uvigo/esei/xcs/rest/entity/VaccineCreationData.java
0 → 100644
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
rest
.
entity
;
import
java.io.Serializable
;
import
es.uvigo.esei.xcs.domain.entities.PeriodicType
;
public
class
VaccineCreationData
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
private
String
name
;
private
String
type
;
// MONODOSE, MULTIDOSE, PERIODIC
private
Integer
doses
;
// solo para MULTIDOSE
private
String
periodicType
;
// solo para PERIODIC
private
Integer
periode
;
// solo para PERIODIC
public
VaccineCreationData
()
{}
public
VaccineCreationData
(
String
name
,
String
type
)
{
this
.
name
=
name
;
this
.
type
=
type
;
}
public
String
getName
()
{
return
name
;
}
public
String
getType
()
{
return
type
;
}
public
Integer
getDoses
()
{
return
doses
;
}
public
String
getPeriodicType
()
{
return
periodicType
;
}
public
Integer
getPeriode
()
{
return
periode
;
}
}
rest/src/main/java/es/uvigo/esei/xcs/rest/entity/VaccineEditionData.java
0 → 100644
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
rest
.
entity
;
import
java.io.Serializable
;
import
es.uvigo.esei.xcs.domain.entities.Vaccine
;
public
class
VaccineEditionData
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
private
String
name
;
VaccineEditionData
()
{}
public
VaccineEditionData
(
String
name
)
{
this
.
name
=
name
;
}
public
String
getName
()
{
return
this
.
name
;
}
public
void
assignData
(
Vaccine
vaccine
)
{
vaccine
.
setName
(
name
);
}
}
rest/src/main/java/es/uvigo/esei/xcs/rest/entity/VetData.java
0 → 100644
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
rest
.
entity
;
import
java.io.Serializable
;
import
java.util.Date
;
import
es.uvigo.esei.xcs.domain.entities.AnimalType
;
import
es.uvigo.esei.xcs.domain.entities.Pet
;
import
es.uvigo.esei.xcs.domain.entities.Vet
;
public
class
VetData
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
private
String
login
;
private
String
password
;
VetData
()
{}
public
VetData
(
String
login
,
String
password
)
{
this
.
login
=
login
;
this
.
password
=
password
;
}
public
String
getLogin
()
{
return
this
.
login
;
}
public
String
getPassword
()
{
return
this
.
password
;
}
public
Vet
toVet
()
{
return
new
Vet
(
this
.
login
,
this
.
password
);
}
}
rest/src/test/java/es/uvigo/esei/xcs/rest/OwnerResourceRestTest.java
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
rest
;
/*
package es.uvigo.esei.xcs.rest;
import static es.uvigo.esei.xcs.domain.entities.IsEqualToOwner.containsOwnersInAnyOrder;
import static es.uvigo.esei.xcs.domain.entities.IsEqualToOwner.equalToOwner;
...
...
@@ -316,3 +316,4 @@ public class OwnerResourceRestTest {
.get();
}
}
*/
\ No newline at end of file
rest/src/test/java/es/uvigo/esei/xcs/rest/OwnerResourceUnitTest.java
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
rest
;
/*
package es.uvigo.esei.xcs.rest;
import static es.uvigo.esei.xcs.domain.entities.IsEqualToOwner.containsOwnersInAnyOrder;
import static es.uvigo.esei.xcs.domain.entities.IsEqualToOwner.equalToOwner;
...
...
@@ -222,3 +222,4 @@ public class OwnerResourceUnitTest extends EasyMockSupport {
resource.delete(null);
}
}
*/
\ No newline at end of file
rest/src/test/java/es/uvigo/esei/xcs/rest/ResourceIntegrationTestSuite.java
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
rest
;
/*
package es.uvigo.esei.xcs.rest;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
...
...
@@ -10,3 +10,4 @@ import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
public class ResourceIntegrationTestSuite {
}
*/
\ No newline at end of file
rest/src/test/java/es/uvigo/esei/xcs/rest/ResourceUnitTestSuite.java
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
rest
;
/*
package es.uvigo.esei.xcs.rest;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
...
...
@@ -10,3 +10,4 @@ import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
public class ResourceUnitTestSuite {
}
*/
\ No newline at end of file
service/src/main/java/es/uvigo/esei/xcs/service/AdministratorService.java
0 → 100644
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
service
;
import
static
java
.
util
.
Objects
.
requireNonNull
;
import
java.util.List
;
import
javax.annotation.security.RolesAllowed
;
import
javax.ejb.Stateless
;
import
javax.persistence.EntityManager
;
import
javax.persistence.PersistenceContext
;
import
es.uvigo.esei.xcs.domain.entities.Administrator
;
@Stateless
@RolesAllowed
(
"ADMIN"
)
public
class
AdministratorService
{
@PersistenceContext
EntityManager
em
;
public
Administrator
get
(
int
id
)
{
return
em
.
find
(
Administrator
.
class
,
id
);
}
public
List
<
Administrator
>
list
(
int
page
,
int
pageSize
){
if
(
page
<
0
)
{
throw
new
IllegalArgumentException
(
"The page can't be negative"
);
}
if
(
pageSize
<=
0
)
{
throw
new
IllegalArgumentException
(
"The page size can't be negative or zero"
);
}
return
em
.
createQuery
(
"SELECT DISTINCT a FROM Administrator a"
,
Administrator
.
class
)
.
setFirstResult
((
page
-
1
)
*
pageSize
)
.
setMaxResults
(
pageSize
)
.
getResultList
();
}
public
Administrator
create
(
Administrator
administrator
)
{
requireNonNull
(
Administrator
.
class
,
"Administrator can't be null"
);
em
.
persist
(
administrator
);
return
administrator
;
}
public
Administrator
update
(
Administrator
administrator
)
{
requireNonNull
(
Administrator
.
class
,
"Administrator can't be null"
);
return
em
.
merge
(
administrator
);
}
public
void
remove
(
int
id
)
{
em
.
remove
(
this
.
get
(
id
));
}
}
service/src/main/java/es/uvigo/esei/xcs/service/CounterService.java
0 → 100644
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
service
;
import
javax.annotation.PostConstruct
;
import
javax.ejb.Lock
;
import
javax.ejb.LockType
;
import
javax.ejb.Singleton
;
import
javax.persistence.EntityManager
;
import
javax.persistence.PersistenceContext
;
@Singleton
public
class
CounterService
{
@PersistenceContext
EntityManager
em
;
private
Long
vaccineCounter
;
private
Long
petCounter
;
@PostConstruct
public
void
init
()
{
this
.
petCounter
=
em
.
createQuery
(
"SELECT COUNT(p) FROM Pet p"
,
Long
.
class
)
.
getSingleResult
();
this
.
vaccineCounter
=
em
.
createQuery
(
"SELECT COUNT(v) FROM Vaccine v"
,
Long
.
class
)
.
getSingleResult
();
}
@Lock
(
LockType
.
WRITE
)
public
void
incrementPetCounter
()
{
this
.
petCounter
++;
}
@Lock
(
LockType
.
WRITE
)
public
void
incrementVaccineCounter
()
{
this
.
vaccineCounter
++;
}
@Lock
(
LockType
.
READ
)
public
Long
getPetCounter
()
{
return
this
.
petCounter
;
}
@Lock
(
LockType
.
READ
)
public
Long
getVaccineCounter
()
{
return
this
.
vaccineCounter
;
}
}
service/src/main/java/es/uvigo/esei/xcs/service/EmailService.java
0 → 100644
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
service
;
import
javax.ejb.Stateless
;
import
javax.mail.Message
;
import
javax.mail.MessagingException
;
import
javax.mail.Session
;
import
javax.mail.Transport
;
import
javax.mail.internet.InternetAddress
;
import
javax.annotation.Resource
;
import
javax.mail.internet.MimeMessage
;
import
java.util.logging.Level
;
import
java.util.logging.Logger
;
@Stateless
public
class
EmailService
{
@Resource
(
name
=
"java:jboss/mail/Default"
)
private
Session
session
;
public
void
send
(
String
addresses
,
String
topic
,
String
textMessage
)
{
try
{
Message
message
=
new
MimeMessage
(
session
);
message
.
setRecipients
(
Message
.
RecipientType
.
TO
,
InternetAddress
.
parse
(
addresses
));
message
.
setSubject
(
topic
);
message
.
setText
(
textMessage
);
Transport
.
send
(
message
);
}
catch
(
MessagingException
e
)
{
Logger
.
getLogger
(
EmailService
.
class
.
getName
()).
log
(
Level
.
WARNING
,
"Cannot send mail"
,
e
);
}
}
}
\ No newline at end of file
service/src/main/java/es/uvigo/esei/xcs/service/IdentifierService.java
0 → 100644
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
service
;
import
javax.ejb.Stateless
;
import
javax.persistence.EntityManager
;
import
javax.persistence.PersistenceContext
;
import
es.uvigo.esei.xcs.domain.entities.Identifier
;
import
static
java
.
util
.
Objects
.
requireNonNull
;
@Stateless
public
class
IdentifierService
{
@PersistenceContext
EntityManager
em
;
public
Identifier
create
(
Identifier
identifier
)
{
requireNonNull
(
identifier
,
"Identifier can't be null"
);
em
.
persist
(
identifier
);
return
identifier
;
}
public
void
remove
(
String
value
)
{
Identifier
identifier
=
em
.
find
(
Identifier
.
class
,
value
);
em
.
remove
(
identifier
);
}
}
service/src/main/java/es/uvigo/esei/xcs/service/OwnerService.java
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
service
;
import
java.util.ArrayList
;
import
java.util.List
;
import
static
java
.
util
.
Objects
.
requireNonNull
;
import
java.util.List
;
import
javax.annotation.security.RolesAllowed
;
import
javax.ejb.Stateless
;
import
javax.persistence.EntityExistsException
;
import
javax.persistence.EntityManager
;
import
javax.persistence.PersistenceContext
;
import
es.uvigo.esei.xcs.domain.entities.Identifier
;
import
es.uvigo.esei.xcs.domain.entities.IdentifierType
;
import
es.uvigo.esei.xcs.domain.entities.Owner
;
import
es.uvigo.esei.xcs.domain.entities.Pet
;
import
es.uvigo.esei.xcs.domain.entities.Vaccination
;
/**
* EJB for the Owners. Only administrators have access to this class.
...
...
@@ -42,8 +45,16 @@ public class OwnerService {
*
* @return the complete list of owners.
*/
public
List
<
Owner
>
list
()
{
public
List
<
Owner
>
list
(
int
page
,
int
pageSize
)
{
if
(
page
<
0
)
{
throw
new
IllegalArgumentException
(
"The page can't be negative"
);
}
if
(
pageSize
<=
0
)
{
throw
new
IllegalArgumentException
(
"The page size can't be negative or zero"
);
}
return
em
.
createQuery
(
"SELECT o FROM Owner o"
,
Owner
.
class
)
.
setFirstResult
(
page
*
pageSize
)
.
setMaxResults
(
pageSize
)
.
getResultList
();
}
...
...
@@ -108,7 +119,8 @@ public class OwnerService {
* it does not identifies a valid owner.
*/
public
void
remove
(
String
login
)
{
em
.
remove
(
this
.
get
(
login
));
Owner
owner
=
this
.
get
(
login
);
em
.
remove
(
owner
);
}
/**
...
...
@@ -119,7 +131,57 @@ public class OwnerService {
* @throws IllegalArgumentException if {@code login} is {@code null} or it
* does not identifies a valid owner.
*/
public
List
<
Pet
>
getPets
(
String
login
)
{
return
new
ArrayList
<>(
this
.
get
(
login
).
getPets
());
public
List
<
Pet
>
getPets
(
String
login
,
int
page
,
int
pageSize
)
{
if
(
page
<
0
)
{
throw
new
IllegalArgumentException
(
"The page can't be negative"
);
}
if
(
pageSize
<=
0
)
{
throw
new
IllegalArgumentException
(
"The page size can't be negative or zero"
);
}
return
em
.
createQuery
(
"SELECT p FROM Owner o "
+
"JOIN o.pets p "
+
"WHERE "
+
"o.login = :login"
,
Pet
.
class
)
.
setFirstResult
(
page
*
pageSize
)
.
setMaxResults
(
pageSize
)
.
getResultList
();
}
public
List
<
Vaccination
>
getVaccinationsFromOwnPet
(
String
login
,
IdentifierType
identifierType
,
String
identifierValue
,
int
page
,
int
pageSize
){
requireNonNull
(
login
,
"login can't be null"
);
requireNonNull
(
identifierType
,
"pet's identifier type can't be null"
);
requireNonNull
(
identifierValue
,
"pet's identifier value can't be null"
);
if
(
page
<
0
)
{
throw
new
IllegalArgumentException
(
"The page can't be negative"
);
}
if
(
pageSize
<=
0
)
{
throw
new
IllegalArgumentException
(
"The page size can't be negative or zero"
);
}
return
em
.
createQuery
(
"SELECT v FROM Owner o "
+
"JOIN o.pets p "
+
"JOIN p.identifiers i "
+
"JOIN p.vaccinations v "
+
"WHERE "
+
"o.login = :login AND "
+
"i.identifierType = :identifierType AND "
+
"i.identifierValue = :identifierValue"
,
Vaccination
.
class
)
.
setParameter
(
"login"
,
login
)
.
setParameter
(
"identifierType"
,
identifierType
)
.
setParameter
(
"identifierValue"
,
identifierValue
)
.
setFirstResult
(
page
*
pageSize
)
.
setMaxResults
(
pageSize
)
.
getResultList
();
}
}
service/src/main/java/es/uvigo/esei/xcs/service/PetService.java
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
service
;
import
static
java
.
util
.
Objects
.
requireNonNull
;
import
java.security.Principal
;
import
java.util.List
;
import
javax.annotation.security.PermitAll
;
import
javax.annotation.security.RolesAllowed
;
import
javax.ejb.EJBAccessException
;
import
javax.ejb.Stateless
;
...
...
@@ -12,6 +15,8 @@ import javax.persistence.PersistenceContext;
import
es.uvigo.esei.xcs.domain.entities.Owner
;
import
es.uvigo.esei.xcs.domain.entities.Pet
;
import
es.uvigo.esei.xcs.domain.entities.Vaccine
;
import
es.uvigo.esei.xcs.domain.entities.Vet
;
/**
* EJB for the Pets. Only owners have access to this class, and only to their
...
...
@@ -20,10 +25,11 @@ import es.uvigo.esei.xcs.domain.entities.Pet;
* @author Miguel Reboiro Jato
*/
@Stateless
@RolesAllowed
(
"OWNER"
)
//@RolesAllowed("OWNER")
@PermitAll
public
class
PetService
{
@Inject
private
Principal
current
Own
er
;
private
Principal
current
Us
er
;
@PersistenceContext
private
EntityManager
em
;
...
...
@@ -37,7 +43,7 @@ public class PetService {
* pet exists with the provided identifier.
* @throws EJBAccessException if the current owner does not owns the pet.
*/
public
Pet
get
(
int
id
)
{
/*public Pet get(Long
id) {
final Pet pet = em.find(Pet.class, id);
if (pet == null) {
...
...
@@ -47,6 +53,10 @@ public class PetService {
} else {
throw new EJBAccessException("Pet's owner is not the current principal");
}
}*/
public
Pet
get
(
Long
id
)
{
return
em
.
find
(
Pet
.
class
,
id
);
}
/**
...
...
@@ -54,9 +64,17 @@ public class PetService {
*
* @return the complete list of pets of the current owner.
*/
public
List
<
Pet
>
list
()
{
public
List
<
Pet
>
list
(
int
page
,
int
pageSize
)
{
if
(
page
<
0
)
{
throw
new
IllegalArgumentException
(
"The page can't be negative"
);
}
if
(
pageSize
<=
0
)
{
throw
new
IllegalArgumentException
(
"The page size can't be negative or zero"
);
}
return
em
.
createQuery
(
"SELECT p FROM Pet p WHERE p.owner.login = :login"
,
Pet
.
class
)
.
setParameter
(
"login"
,
currentOwner
.
getName
())
.
setFirstResult
(
page
*
pageSize
)
.
setMaxResults
(
pageSize
)
.
setParameter
(
"login"
,
currentUser
.
getName
())
.
getResultList
();
}
...
...
@@ -72,7 +90,9 @@ public class PetService {
* already exists.
*/
public
Pet
create
(
Pet
pet
)
{
final
Owner
owner
=
em
.
find
(
Owner
.
class
,
currentOwner
.
getName
());
requireNonNull
(
pet
,
"Pet can't be null"
);
final
Owner
owner
=
em
.
find
(
Owner
.
class
,
currentUser
.
getName
());
if
(
pet
.
getOwner
()
!=
null
&&
!
pet
.
getOwner
().
getLogin
().
equals
(
owner
.
getLogin
()))
{
throw
new
EJBAccessException
(
"Pet's owner is not the current principal"
);
...
...
@@ -98,7 +118,7 @@ public class PetService {
if
(
pet
.
getOwner
()
==
null
)
throw
new
IllegalArgumentException
(
"Pet must have an owner"
);
if
(
pet
.
getOwner
().
getLogin
().
equals
(
this
.
current
Own
er
.
getName
()))
{
if
(
pet
.
getOwner
().
getLogin
().
equals
(
this
.
current
Us
er
.
getName
()))
{
return
em
.
merge
(
pet
);
}
else
{
throw
new
EJBAccessException
(
"Pet's owner is not the current principal"
);
...
...
@@ -113,10 +133,65 @@ public class PetService {
* identifier.
* @throws EJBAccessException if the pet's owner is not the current user.
*/
public
void
remove
(
int
id
)
{
public
void
remove
(
Long
id
)
{
final
Pet
pet
=
this
.
get
(
id
);
pet
.
setOwner
(
null
);
em
.
remove
(
pet
);
}
public
List
<
Vaccine
>
getVaccinesByPetId
(
Long
id
,
int
page
,
int
pageSize
){
if
(
page
<
0
)
{
throw
new
IllegalArgumentException
(
"The page can't be negative"
);
}
if
(
pageSize
<=
0
)
{
throw
new
IllegalArgumentException
(
"The page size can't be negative or zero"
);
}
return
em
.
createQuery
(
"SELECT v.pet FROM Vaccination v WHERE v.pet.id = :id"
,
Vaccine
.
class
)
.
setFirstResult
(
page
*
pageSize
)
.
setMaxResults
(
pageSize
)
.
getResultList
();
}
public
void
assignVetToPet
(
Long
petId
)
{
requireNonNull
(
petId
,
"Pet ID can't be null"
);
//requireNonNull(vetLogin, "Vet login can't be null");
Pet
pet
=
em
.
find
(
Pet
.
class
,
petId
);
if
(
pet
==
null
)
throw
new
IllegalArgumentException
(
"Pet not found"
);
Vet
vet
=
em
.
find
(
Vet
.
class
,
currentUser
.
getName
());
if
(
vet
==
null
)
throw
new
IllegalArgumentException
(
"Vet not found"
);
pet
.
addVet
(
vet
);
pet
.
internalAddVet
(
vet
);
em
.
merge
(
pet
);
}
public
void
unassignVetFromPet
(
Long
petId
,
String
vetLogin
)
{
requireNonNull
(
petId
,
"Pet ID can't be null"
);
requireNonNull
(
vetLogin
,
"Vet login can't be null"
);
Pet
pet
=
em
.
find
(
Pet
.
class
,
petId
);
if
(
pet
==
null
)
throw
new
IllegalArgumentException
(
"Pet not found"
);
Vet
vet
=
em
.
find
(
Vet
.
class
,
vetLogin
);
if
(
vet
==
null
)
throw
new
IllegalArgumentException
(
"Vet not found"
);
pet
.
removeVet
(
vet
);
pet
.
internalRemoveVet
(
vet
);
em
.
merge
(
pet
);
}
}
service/src/main/java/es/uvigo/esei/xcs/service/UserService.java
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
service
;
import
java.security.Principal
;
import
java.util.List
;
import
static
java
.
util
.
Objects
.
requireNonNull
;
import
javax.annotation.security.RolesAllowed
;
import
javax.ejb.Stateless
;
...
...
@@ -11,7 +14,7 @@ import javax.persistence.PersistenceContext;
import
es.uvigo.esei.xcs.domain.entities.User
;
@Stateless
@RolesAllowed
({
"OWNER"
,
"ADMIN"
})
@RolesAllowed
({
"OWNER"
,
"ADMIN"
,
"VET"
})
public
class
UserService
{
@PersistenceContext
private
EntityManager
em
;
...
...
@@ -27,4 +30,35 @@ public class UserService {
public
User
getCurrentUser
()
{
return
this
.
em
.
find
(
User
.
class
,
this
.
principal
.
getName
());
}
public
User
get
(
String
login
)
{
return
this
.
em
.
find
(
User
.
class
,
login
);
}
public
List
<
User
>
list
(
int
page
,
int
pageSize
){
if
(
page
<
0
)
{
throw
new
IllegalArgumentException
(
"The page can't be negative"
);
}
if
(
pageSize
<=
0
)
{
throw
new
IllegalArgumentException
(
"The page size can't be negative or zero"
);
}
return
this
.
em
.
createQuery
(
"SELECT DISTINCT u FROM User u"
,
User
.
class
)
.
setFirstResult
(
page
*
pageSize
)
.
setMaxResults
(
pageSize
)
.
getResultList
();
}
public
User
create
(
User
user
)
{
requireNonNull
(
user
,
"User can't be null"
);
this
.
em
.
persist
(
user
);
return
user
;
}
public
void
remove
(
String
login
)
{
User
user
=
this
.
get
(
login
);
this
.
em
.
remove
(
user
);
}
}
service/src/main/java/es/uvigo/esei/xcs/service/VaccinationService.java
0 → 100644
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
service
;
import
java.util.Date
;
import
static
java
.
util
.
Objects
.
requireNonNull
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.util.List
;
import
javax.ejb.Stateless
;
import
javax.persistence.EntityManager
;
import
javax.persistence.PersistenceContext
;
import
es.uvigo.esei.xcs.domain.entities.Pet
;
import
es.uvigo.esei.xcs.domain.entities.Vaccination
;
import
es.uvigo.esei.xcs.domain.entities.Vaccine
;
@Stateless
public
class
VaccinationService
{
@PersistenceContext
EntityManager
em
;
public
Vaccination
get
(
int
vaccinationId
)
{
return
em
.
find
(
Vaccination
.
class
,
vaccinationId
);
}
public
List
<
Vaccination
>
list
(
int
page
,
int
pageSize
){
if
(
page
<
0
)
{
throw
new
IllegalArgumentException
(
"The page can't be negative"
);
}
if
(
pageSize
<=
0
)
{
throw
new
IllegalArgumentException
(
"The page size can't be negative or zero"
);
}
return
em
.
createQuery
(
"SELECT DISTINCT v FROM Vaccination v"
,
Vaccination
.
class
)
.
setFirstResult
(
page
*
pageSize
)
.
setMaxResults
(
pageSize
)
.
getResultList
();
}
public
Vaccination
create
(
int
petId
,
int
vaccineId
,
String
textDate
)
{
Pet
pet
=
requireNonNull
(
em
.
find
(
Pet
.
class
,
petId
),
"Pet can't be null"
);
Vaccine
vaccine
=
requireNonNull
(
em
.
find
(
Vaccine
.
class
,
vaccineId
),
"Vaccine can't be null"
);
Date
date
=
new
Date
();
SimpleDateFormat
format
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
if
(
textDate
!=
null
)
{
try
{
date
=
format
.
parse
(
textDate
);
}
catch
(
ParseException
e
)
{
date
=
null
;
}
}
Vaccination
vaccination
=
new
Vaccination
(
pet
,
vaccine
,
date
);
em
.
persist
(
vaccination
);
return
vaccination
;
}
public
Vaccination
updateDate
(
int
vaccinationId
,
Date
date
)
{
Vaccination
vaccination
=
em
.
find
(
Vaccination
.
class
,
vaccinationId
);
requireNonNull
(
vaccination
,
"Vaccination can't be null"
);
vaccination
.
setDate
(
date
);
return
em
.
merge
(
vaccination
);
}
public
void
remove
(
int
vaccinationId
)
{
Vaccination
vaccination
=
this
.
get
(
vaccinationId
);
requireNonNull
(
vaccination
,
"Vaccination can't be null"
);
em
.
remove
(
vaccination
);
}
}
service/src/main/java/es/uvigo/esei/xcs/service/VaccineService.java
0 → 100644
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
service
;
import
java.util.List
;
import
javax.annotation.security.PermitAll
;
import
javax.ejb.Stateless
;
import
javax.persistence.EntityManager
;
import
javax.persistence.PersistenceContext
;
import
es.uvigo.esei.xcs.domain.entities.MonodoseVaccine
;
import
es.uvigo.esei.xcs.domain.entities.MultidoseVaccine
;
import
es.uvigo.esei.xcs.domain.entities.PeriodicType
;
import
es.uvigo.esei.xcs.domain.entities.PeriodicVaccine
;
import
es.uvigo.esei.xcs.domain.entities.Pet
;
import
es.uvigo.esei.xcs.domain.entities.Vaccine
;
@Stateless
@PermitAll
public
class
VaccineService
{
@PersistenceContext
private
EntityManager
em
;
public
Vaccine
get
(
Long
id
)
{
final
Vaccine
vaccine
=
em
.
find
(
Vaccine
.
class
,
id
);
return
vaccine
;
}
public
List
<
Vaccine
>
list
(
int
page
,
int
pageSize
){
if
(
page
<
0
)
{
throw
new
IllegalArgumentException
(
"The page can't be negative"
);
}
if
(
pageSize
<=
0
)
{
throw
new
IllegalArgumentException
(
"The page size can't be negative or zero"
);
}
return
em
.
createQuery
(
"SELECT v FROM Vaccine v"
,
Vaccine
.
class
)
.
setFirstResult
(
page
*
pageSize
)
.
setMaxResults
(
pageSize
)
.
getResultList
();
}
public
Vaccine
create
(
String
name
,
String
type
,
Integer
doses
,
String
periodicTypeString
,
Integer
periode
)
{
switch
(
type
)
{
case
"MONODOSE"
:
MonodoseVaccine
monodoseVaccine
=
new
MonodoseVaccine
(
name
);
em
.
persist
(
monodoseVaccine
);
return
monodoseVaccine
;
case
"MULTIDOSE"
:
MultidoseVaccine
multidoseVaccine
=
new
MultidoseVaccine
(
name
,
doses
);
em
.
persist
(
multidoseVaccine
);
return
multidoseVaccine
;
case
"PERIODIC"
:
PeriodicType
periodicType
=
null
;
if
(
periodicTypeString
!=
null
)
{
periodicType
=
PeriodicType
.
valueOf
(
periodicTypeString
);
}
PeriodicVaccine
periodicVaccine
=
new
PeriodicVaccine
(
name
,
periodicType
,
periode
);
em
.
persist
(
periodicVaccine
);
return
periodicVaccine
;
default
:
throw
new
IllegalArgumentException
(
"Tipo de vacuna desconocido"
);
}
}
public
Vaccine
update
(
Vaccine
vaccine
)
{
if
(
vaccine
==
null
)
throw
new
IllegalArgumentException
(
"vaccine can't be null"
);
return
em
.
merge
(
vaccine
);
}
public
void
remove
(
Long
id
)
{
final
Vaccine
vaccine
=
this
.
get
(
id
);
em
.
remove
(
vaccine
);
}
public
List
<
Pet
>
getVaccinatedPetsByVaccine
(
int
vaccineId
,
int
page
,
int
pageSize
){
if
(
page
<
0
)
{
throw
new
IllegalArgumentException
(
"The page can't be negative"
);
}
if
(
pageSize
<=
0
)
{
throw
new
IllegalArgumentException
(
"The page size can't be negative or zero"
);
}
return
em
.
createQuery
(
"SELECT v.pet FROM Vaccination v "
+
"WHERE v.vaccine.id = :vaccineId"
,
Pet
.
class
)
.
setFirstResult
(
page
*
pageSize
)
.
setMaxResults
(
pageSize
)
.
setParameter
(
"vaccineId"
,
vaccineId
)
.
getResultList
();
}
public
List
<
Pet
>
getVaccinatedPetsByVaccineName
(
String
vaccineName
,
int
page
,
int
pageSize
){
if
(
page
<
0
)
{
throw
new
IllegalArgumentException
(
"The page can't be negative"
);
}
if
(
pageSize
<=
0
)
{
throw
new
IllegalArgumentException
(
"The page size can't be negative or zero"
);
}
return
em
.
createQuery
(
"SELECT v.pet FROM Vaccination v\r\n"
+
"WHERE v.vaccine.name = :vaccineName"
,
Pet
.
class
)
.
setFirstResult
(
page
*
pageSize
)
.
setMaxResults
(
pageSize
)
.
setParameter
(
"vaccineName"
,
vaccineName
)
.
getResultList
();
}
}
service/src/main/java/es/uvigo/esei/xcs/service/VetService.java
0 → 100644
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
service
;
import
static
java
.
util
.
Objects
.
requireNonNull
;
import
java.util.List
;
import
javax.annotation.security.PermitAll
;
import
javax.annotation.security.RolesAllowed
;
import
javax.ejb.Stateless
;
import
javax.persistence.EntityManager
;
import
javax.persistence.PersistenceContext
;
import
es.uvigo.esei.xcs.domain.entities.IdentifierType
;
import
es.uvigo.esei.xcs.domain.entities.Pet
;
import
es.uvigo.esei.xcs.domain.entities.Vaccination
;
import
es.uvigo.esei.xcs.domain.entities.Vet
;
@Stateless
//@RolesAllowed("VET")
@PermitAll
public
class
VetService
{
@PersistenceContext
EntityManager
em
;
public
Vet
get
(
String
login
)
{
return
em
.
find
(
Vet
.
class
,
login
);
}
public
List
<
Vet
>
list
(){
return
em
.
createQuery
(
"SELECT DISTINCT v FROM Vet v"
,
Vet
.
class
)
.
getResultList
();
}
public
List
<
Vet
>
findByPetName
(
String
petName
,
int
page
,
int
pageSize
){
requireNonNull
(
petName
,
"Pet's name can't be null"
);
if
(
page
<
0
)
{
throw
new
IllegalArgumentException
(
"The page can't be negative"
);
}
if
(
pageSize
<=
0
)
{
throw
new
IllegalArgumentException
(
"The page size can't be negative or zero"
);
}
return
this
.
em
.
createQuery
(
"SELECT DISTINCT v FROM Vet v JOIN v.pets p "
+
"WHERE p.name = :petName"
,
Vet
.
class
)
.
setFirstResult
(
page
*
pageSize
)
.
setMaxResults
(
pageSize
)
.
setParameter
(
"petName"
,
petName
)
.
getResultList
();
}
public
Vet
create
(
Vet
vet
)
{
requireNonNull
(
Vet
.
class
,
"Vet can't be null"
);
em
.
persist
(
vet
);
return
vet
;
}
public
Vet
update
(
Vet
vet
)
{
requireNonNull
(
Vet
.
class
,
"Vet can't be null"
);
return
em
.
merge
(
vet
);
}
public
void
remove
(
String
login
)
{
em
.
remove
(
this
.
get
(
login
));
}
public
List
<
Pet
>
getPets
(
String
login
,
int
page
,
int
pageSize
)
{
requireNonNull
(
login
,
"Login can't be null"
);
if
(
page
<
0
)
{
throw
new
IllegalArgumentException
(
"The page can't be negative"
);
}
if
(
pageSize
<=
0
)
{
throw
new
IllegalArgumentException
(
"The page size can't be negative or zero"
);
}
return
this
.
em
.
createQuery
(
"SELECT DISTINCT p FROM Vet v JOIN v.pets p "
+
"WHERE v.login = :login"
,
Pet
.
class
)
.
setFirstResult
(
page
*
pageSize
)
.
setMaxResults
(
pageSize
)
.
setParameter
(
"login"
,
login
)
.
getResultList
();
}
public
List
<
Vaccination
>
getVaccinationsFromOwnPet
(
String
login
,
IdentifierType
identifierType
,
String
identifierValue
,
int
page
,
int
pageSize
){
requireNonNull
(
login
,
"login can't be null"
);
requireNonNull
(
identifierType
,
"pet's identifier type can't be null"
);
requireNonNull
(
identifierValue
,
"pet's identifier value can't be null"
);
if
(
page
<
0
)
{
throw
new
IllegalArgumentException
(
"The page can't be negative"
);
}
if
(
pageSize
<=
0
)
{
throw
new
IllegalArgumentException
(
"The page size can't be negative or zero"
);
}
return
em
.
createQuery
(
"SELECT v FROM Vet vet "
+
"JOIN vet.pets p "
+
"JOIN p.identifiers i "
+
"JOIN p.vaccinations v "
+
"WHERE "
+
"vet.login = :login AND "
+
"i.identifierType = :identifierType AND "
+
"i.identifierValue = :identifierValue"
,
Vaccination
.
class
)
.
setParameter
(
"login"
,
login
)
.
setParameter
(
"identifierType"
,
identifierType
)
.
setParameter
(
"identifierValue"
,
identifierValue
)
.
setFirstResult
(
page
*
pageSize
)
.
setMaxResults
(
pageSize
)
.
getResultList
();
}
public
void
assignPetToVet
()
{
}
}
service/src/main/resources/META-INF/persistence.xml
View file @
4190697b
...
...
@@ -7,9 +7,17 @@
<persistence-unit
name=
"runtime"
>
<jta-data-source>
java:jboss/datasources/xcs
</jta-data-source>
<class>
es.uvigo.esei.xcs.domain.entities.Administrator
</class>
<class>
es.uvigo.esei.xcs.domain.entities.Identifier
</class>
<class>
es.uvigo.esei.xcs.domain.entities.MonodoseVaccine
</class>
<class>
es.uvigo.esei.xcs.domain.entities.MultidoseVaccine
</class>
<class>
es.uvigo.esei.xcs.domain.entities.Owner
</class>
<class>
es.uvigo.esei.xcs.domain.entities.PeriodicVaccine
</class>
<class>
es.uvigo.esei.xcs.domain.entities.Pet
</class>
<class>
es.uvigo.esei.xcs.domain.entities.Administrator
</class>
<class>
es.uvigo.esei.xcs.domain.entities.User
</class>
<class>
es.uvigo.esei.xcs.domain.entities.Vaccination
</class>
<class>
es.uvigo.esei.xcs.domain.entities.Vaccine
</class>
<class>
es.uvigo.esei.xcs.domain.entities.Vet
</class>
<exclude-unlisted-classes>
false
</exclude-unlisted-classes>
<properties>
...
...
service/src/test/java/es/uvigo/esei/xcs/service/OwnerServiceIllegalAccessIntegrationTest.java
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
service
;
/*
package es.uvigo.esei.xcs.service;
import static es.uvigo.esei.xcs.domain.entities.OwnersDataset.anyOwner;
import static es.uvigo.esei.xcs.domain.entities.OwnersDataset.existentLogin;
...
...
@@ -122,4 +122,4 @@ public class OwnerServiceIllegalAccessIntegrationTest {
public void testGetPetsRoleOwner() {
asOwner.run(this::testGetPetsNoRole);
}
}
}
*/
service/src/test/java/es/uvigo/esei/xcs/service/OwnerServiceIntegrationTest.java
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
service
;
/*
package es.uvigo.esei.xcs.service;
import static es.uvigo.esei.xcs.domain.entities.IsEqualToOwner.containsOwnersInAnyOrder;
import static es.uvigo.esei.xcs.domain.entities.IsEqualToOwner.equalToOwner;
...
...
@@ -258,4 +258,4 @@ public class OwnerServiceIntegrationTest {
public void testGetPetsNull() {
asAdmin.call(() -> facade.getPets(null));
}
}
}
*/
service/src/test/java/es/uvigo/esei/xcs/service/PetServiceIllegalAccessIntegrationTest.java
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
service
;
/*
package es.uvigo.esei.xcs.service;
import static es.uvigo.esei.xcs.domain.entities.OwnersDataset.anyPet;
import static es.uvigo.esei.xcs.domain.entities.OwnersDataset.existentPetId;
...
...
@@ -159,4 +159,4 @@ public class PetServiceIllegalAccessIntegrationTest {
asOwner.run(() -> facade.remove(pet1.getId()));
}
}
}
*/
service/src/test/java/es/uvigo/esei/xcs/service/PetServiceIntegrationTest.java
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
service
;
/*
package es.uvigo.esei.xcs.service;
import static es.uvigo.esei.xcs.domain.entities.IsEqualToPet.containsPetsInAnyOrder;
import static es.uvigo.esei.xcs.domain.entities.IsEqualToPet.equalToPet;
...
...
@@ -246,4 +246,4 @@ public class PetServiceIntegrationTest {
asOwner.run(() -> facade.remove(petId));
}
}
}
*/
service/src/test/java/es/uvigo/esei/xcs/service/ServiceIntegrationTestSuite.java
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
service
;
/*
package es.uvigo.esei.xcs.service;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
...
...
@@ -14,4 +14,4 @@ import org.junit.runners.Suite.SuiteClasses;
UserServiceIllegalAccessIntegrationTest.class
})
public class ServiceIntegrationTestSuite {
}
}
*/
service/src/test/java/es/uvigo/esei/xcs/service/UserServiceIllegalAccessIntegrationTest.java
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
service
;
/*
package es.uvigo.esei.xcs.service;
import static es.uvigo.esei.xcs.domain.entities.IsEqualToUser.equalToUser;
import static es.uvigo.esei.xcs.domain.entities.OwnersDataset.existentOwner;
...
...
@@ -81,3 +81,4 @@ public class UserServiceIllegalAccessIntegrationTest {
}
}
*/
\ No newline at end of file
service/src/test/java/es/uvigo/esei/xcs/service/UserServiceIntegrationTest.java
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
service
;
/*
package es.uvigo.esei.xcs.service;
import javax.ejb.EJBAccessException;
import javax.inject.Inject;
...
...
@@ -43,4 +43,4 @@ public class UserServiceIntegrationTest {
public void testGetCredentialsNoUser() {
facade.getCurrentUser();
}
}
}
*/
tests/src/main/java/es/uvigo/esei/xcs/domain/entities/IsEqualToEntity.java
View file @
4190697b
tests/src/main/java/es/uvigo/esei/xcs/domain/entities/OwnersDataset.java
View file @
4190697b
...
...
@@ -12,7 +12,7 @@ import java.util.List;
import
java.util.Set
;
public
class
OwnersDataset
{
public
static
final
String
EXISTENT_LOGIN
=
"pepe"
;
/*
public static final String EXISTENT_LOGIN = "pepe";
public static final String NON_EXISTENT_LOGIN = "non-existent";
public static final String OWNER_WITH_PETS_LOGIN = "juan";
public static final String OWNER_WITHOUT_PETS_LOGIN = "lorena";
...
...
@@ -222,5 +222,5 @@ public class OwnersDataset {
public static int nonExistentPetId() {
return 1000000;
}
}
*/
}
tests/src/main/java/es/uvigo/esei/xcs/domain/entities/UsersDataset.java
View file @
4190697b
package
es
.
uvigo
.
esei
.
xcs
.
domain
.
entities
;
public
class
UsersDataset
{
public
static
final
String
EXISTENT_LOGIN
=
"jose"
;
/*
public static final String EXISTENT_LOGIN = "jose";
public static User[] users() {
final Owner[] owners = OwnersDataset.owners();
...
...
@@ -15,5 +15,5 @@ public class UsersDataset {
public static User existentAdmin() {
return users()[0];
}
}
*/
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment