diff --git a/pom.xml b/pom.xml index d00d9c5..6d82ee3 100755 --- a/pom.xml +++ b/pom.xml @@ -78,6 +78,11 @@ 2.8.0 compile + + org.apache.commons + commons-lang3 + 3.7 + diff --git a/src/main/java/edu/itu/cavabunga/advice/ExceptionHandlerAdvice.java b/src/main/java/edu/itu/cavabunga/advice/ExceptionHandlerAdvice.java index 5e952c4..39b0e10 100755 --- a/src/main/java/edu/itu/cavabunga/advice/ExceptionHandlerAdvice.java +++ b/src/main/java/edu/itu/cavabunga/advice/ExceptionHandlerAdvice.java @@ -20,6 +20,7 @@ public class ExceptionHandlerAdvice { @ExceptionHandler(NotFound.class) @ResponseStatus(HttpStatus.NOT_FOUND) public ErrorResponse handleNotFound(NotFound e){ + System.out.printf(e.getMessage()); return new ErrorResponse(1,e.getMessage(), null); } @@ -32,6 +33,7 @@ public ErrorResponse handleNotFound(NotFound e){ @ExceptionHandler(Conflict.class) @ResponseStatus(HttpStatus.CONFLICT) public ErrorResponse handleConflict(Conflict e){ + System.out.printf(e.getMessage()); return new ErrorResponse(1,e.getMessage(),null); } @@ -44,6 +46,7 @@ public ErrorResponse handleConflict(Conflict e){ @ExceptionHandler(IllegalStateException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) public ErrorResponse handleIllegalState(IllegalStateException e){ + System.out.printf(e.getMessage()); return new ErrorResponse(1,e.getMessage(),null); } @@ -56,6 +59,7 @@ public ErrorResponse handleIllegalState(IllegalStateException e){ @ExceptionHandler(IllegalArgumentException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) public ErrorResponse handleIllegalArgument(IllegalArgumentException e){ + System.out.printf(e.getMessage()); return new ErrorResponse(1,e.getMessage(),null); } @@ -65,11 +69,12 @@ public ErrorResponse handleIllegalArgument(IllegalArgumentException e){ * @param e caught exception * @return ErrorResponse with exception message with related HTTP status */ - @ExceptionHandler(Exception.class) + /* @ExceptionHandler(Exception.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) public ErrorResponse handleException(Exception e){ + System.out.printf(e.getMessage()); return new ErrorResponse(1,e.getMessage(), null); - } + }*/ } diff --git a/src/main/java/edu/itu/cavabunga/business/CalendarManagerServiceImpl.java b/src/main/java/edu/itu/cavabunga/business/CalendarManagerServiceImpl.java index b39fd1b..77fcce4 100755 --- a/src/main/java/edu/itu/cavabunga/business/CalendarManagerServiceImpl.java +++ b/src/main/java/edu/itu/cavabunga/business/CalendarManagerServiceImpl.java @@ -110,7 +110,7 @@ public void addComponent(Component component, String owner, Long parentComponent Assert.state( component.getId() == null, - "New component cannot have id field, please use update methods" + "44New component cannot have id field, please use update methods" ); if(!participantService.getParticipantByUserName(owner).isPresent()) { @@ -192,7 +192,7 @@ public void addProperty(Property property, Long parentComponentId){ Assert.notNull(parentComponentId, "ParentComponentId must not be null!"); Assert.state( property.getId() == null, - "New Property cannot have id field, please use update methods" + "55New Property cannot have id field, please use update methods" ); if(!icalService.getComponentById(parentComponentId).isPresent()) { @@ -269,7 +269,7 @@ public void addParameter(Parameter parameter, Long parentPropertyId){ Assert.notNull(parentPropertyId, "ParentPropertyId must not be null!"); Assert.state( parameter.getId() == null, - "New parameter cannot have id field, please use update methods" + "77New parameter cannot have id field, please use update methods" ); if(!icalService.getPropertyById(parentPropertyId).isPresent()) { diff --git a/src/main/java/edu/itu/cavabunga/controller/SeederController.java b/src/main/java/edu/itu/cavabunga/controller/SeederController.java new file mode 100644 index 0000000..82e2811 --- /dev/null +++ b/src/main/java/edu/itu/cavabunga/controller/SeederController.java @@ -0,0 +1,130 @@ +package edu.itu.cavabunga.controller; + +import edu.itu.cavabunga.business.CalendarManagerService; +import edu.itu.cavabunga.core.entity.Component; +import edu.itu.cavabunga.core.entity.Parameter; +import edu.itu.cavabunga.core.entity.Participant; +import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.core.entity.component.ComponentType; +import edu.itu.cavabunga.core.entity.parameter.ParameterType; +import edu.itu.cavabunga.core.entity.participant.ParticipantType; +import edu.itu.cavabunga.core.entity.property.PropertyType; +import edu.itu.cavabunga.core.entity.property.PropertyValueType; +import edu.itu.cavabunga.core.service.IcalService; +import edu.itu.cavabunga.core.service.ParticipantService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import sun.awt.geom.AreaOp; + +@RestController +@RequestMapping(path="/seeddb") +public class SeederController { + @Autowired + private CalendarManagerService calendarManagerService; + + @Autowired + private ParticipantService participantService; + + @Autowired + private IcalService icalService; + + + + + @GetMapping + @Transactional + public String seedDataBase(){ + participantService.saveParticipant(participantService.createParticipant("testuser", ParticipantType.User)); + participantService.saveParticipant(participantService.createParticipant("testgroup", ParticipantType.Group)); + + + Component calendar = icalService.createComponent(ComponentType.Calendar); + Property prodid = icalService.createProperty(PropertyType.Prodid); + prodid.setValue("-//Test Inc//Cavabunga Calendar//"); + Property version = icalService.createProperty(PropertyType.Version); + version.setValue("2.0"); + Property calscale = icalService.createProperty(PropertyType.Calscale); + calscale.setValue("GREGORIAN"); + Property method = icalService.createProperty(PropertyType.Method); + method.setValue("PUBLISH"); + calendar.addProperty(prodid); + calendar.addProperty(version); + calendar.addProperty(calscale); + calendar.addProperty(method); + + calendar.setOwner(calendarManagerService.getParticipantByUserName("testuser")); + + + Component timezone = icalService.createComponent(ComponentType.Timezone); + Property tzid = icalService.createProperty(PropertyType.Tzid); + tzid.setValue("Europe/Istanbul"); + timezone.addProperty(tzid); + Component standard = icalService.createComponent(ComponentType.Standard); + Property tzoffsetfrom = icalService.createProperty(PropertyType.Tzoffsetfrom); + tzoffsetfrom.setValue("+0300"); + Property tzoffsetto = icalService.createProperty(PropertyType.Tzoffsetto); + tzoffsetto.setValue("+0300"); + Property tzname = icalService.createProperty(PropertyType.Tzname); + tzname.setValue("+03"); + standard.addProperty(tzoffsetfrom); + standard.addProperty(tzoffsetto); + standard.addProperty(tzname); + timezone.addComponent(standard); + calendar.addComponent(timezone); + + Component event = icalService.createComponent(ComponentType.Event); + Property dtstart = icalService.createProperty(PropertyType.Dtstart); + dtstart.setValue("20160423T170000Z"); + Property dtend = icalService.createProperty(PropertyType.Dtend); + dtend.setValue("20160423T180000Z"); + Property dtstamp = icalService.createProperty(PropertyType.Dtstamp); + dtstamp.setValue("20180520T181535Z"); + Property organizer = icalService.createProperty(PropertyType.Organizer); + organizer.setValue("mailto:unknownorganizer@calendar.cavabunga.com"); + Parameter cn = icalService.createParameter(ParameterType.Cn); + cn.setValue("unknownorganizer@calendar.google.com"); + organizer.addParameter(cn); + Property uid = icalService.createProperty(PropertyType.Uid); + uid.setValue("7kukuqrfedlm2f9t0vr42q2qc8cm9l3o7vn9g00q3j3s5mhdo2ovuahsd9hf54qk3j60"); + Property attendee = icalService.createProperty(PropertyType.Attendee); + attendee.setValue("mailto:dgkncelik@gmail.com"); + Parameter cutype = icalService.createParameter(ParameterType.Cutype); + cutype.setValue("INDIVIDUAL"); + Parameter role = icalService.createParameter(ParameterType.Role); + role.setValue("REQ-PARTICIPANT"); + Parameter partstat = icalService.createParameter(ParameterType.Partstat); + partstat.setValue("ACCEPTED"); + attendee.addParameter(cutype); + attendee.addParameter(role); + attendee.addParameter(partstat); + Property classs = icalService.createProperty(PropertyType.Class); + classs.setValue("PRIVATE"); + Property created = icalService.createProperty(PropertyType.Created); + created.setValue("20160111T065955Z"); + Property description = icalService.createProperty(PropertyType.Description); + description.setValue("---description_here---"); + Property lastmod = icalService.createProperty(PropertyType.Lastmod); + lastmod.setValue("20160112T053844Z"); + Property seq = icalService.createProperty(PropertyType.Seq); + seq.setValue("0"); + event.addProperty(dtstart); + event.addProperty(dtend); + event.addProperty(dtstamp); + event.addProperty(organizer); + event.addProperty(uid); + event.addProperty(attendee); + event.addProperty(classs); + event.addProperty(created); + event.addProperty(description); + event.addProperty(lastmod); + event.addProperty(seq); + calendar.addComponent(event); + + icalService.saveComponent(calendar); + + return "ok"; + } +} diff --git a/src/main/java/edu/itu/cavabunga/core/entity/Component.java b/src/main/java/edu/itu/cavabunga/core/entity/Component.java index 93aa594..277062b 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/Component.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/Component.java @@ -2,7 +2,10 @@ import com.fasterxml.jackson.annotation.*; import edu.itu.cavabunga.core.entity.component.*; +import edu.itu.cavabunga.core.entity.property.PropertyType; +import edu.itu.cavabunga.exception.Validation; import lombok.Data; +import org.apache.commons.lang.Validate; import org.hibernate.annotations.DiscriminatorOptions; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; @@ -15,7 +18,6 @@ @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING) -@EntityListeners(AuditingEntityListener.class) @DiscriminatorOptions(force=true) @JsonIgnoreProperties(ignoreUnknown = true) @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY) @@ -69,7 +71,78 @@ public void addProperty(Property property){ properties.add(property); } - public boolean validate(){ - return true; + public void validate(){ + if(!components.isEmpty()){ + for (Component c : components){ + try { + c.validate(); + }catch (Exception e){ + throw new Validation(this.getClass().getName() + " component's sub component validation failed: " + e.getMessage()); + } + } + } + + if(!properties.isEmpty()){ + for(Property p : properties){ + try { + p.validate(); + }catch (Exception e){ + throw new Validation(this.getClass().getName() + " component property validateion failed " + e.getMessage()); + } + } + } + } + + public void validateOptionalOneProperties(List propertyTypeList){ + Integer propertyCount = 0; + for(PropertyType pt : propertyTypeList){ + for(Property p : properties){ + if(p.getClass().getName().equals(pt.create().getClass().getName())){ + propertyCount++; + } + + if(propertyCount >= 2){ + throw new Validation("Component validation failed in optional-one properties check: " + p.getClass().getName()); + } + } + propertyCount = 0; + } + } + + public void validateOptionalManyProperties(){ + // + } + + public void validateRequiredOneProperties(List propertyTypeList){ + Integer propertyCount = 0; + for(PropertyType pt : propertyTypeList){ + for(Property p : properties){ + if(p.getClass().getName().equals(pt.create().getClass().getName())){ + propertyCount++; + } + } + + if(propertyCount != 1){ + throw new Validation("Component validation failed in required-one properties check. Count " + propertyCount + ": " + pt.create().getClass().getName()); + } + + propertyCount = 0; + } + } + + public void validateReqiredManyProperties(List propertyTypeList){ + Integer propertyCount = 0; + for(PropertyType pt : propertyTypeList){ + for(Property p : properties){ + if(p.getClass().getName().equals(pt.create().getClass().getName())){ + propertyCount++; + } + } + + if(propertyCount == 0){ + throw new Validation("Component validation failed in required-many properties check: " + pt.create().getClass().getName()); + } + + } } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/Parameter.java b/src/main/java/edu/itu/cavabunga/core/entity/Parameter.java index 2ca87b0..4ee78d8 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/Parameter.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/Parameter.java @@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; import edu.itu.cavabunga.core.entity.parameter.*; +import edu.itu.cavabunga.exception.Validation; import lombok.Data; import org.hibernate.annotations.DiscriminatorOptions; @@ -48,8 +49,14 @@ public abstract class Parameter { private String value; - @ManyToOne(cascade = CascadeType.ALL) + @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "property_id") @JsonBackReference private Property property; + + public void validate(){ + if((this.value == null) || (this.value.trim().isEmpty())){ + throw new Validation(this.getClass().getName() + " parameter cannot be empty"); + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/Participant.java b/src/main/java/edu/itu/cavabunga/core/entity/Participant.java index 881b461..33263d7 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/Participant.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/Participant.java @@ -1,9 +1,7 @@ + package edu.itu.cavabunga.core.entity; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonManagedReference; -import com.fasterxml.jackson.annotation.JsonSubTypes; -import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.*; import edu.itu.cavabunga.core.entity.participant.Group; import edu.itu.cavabunga.core.entity.participant.User; import lombok.Data; @@ -21,7 +19,7 @@ @DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING) @EntityListeners(AuditingEntityListener.class) @DiscriminatorOptions(force=true) -@JsonIgnoreProperties(ignoreUnknown = true) +@JsonIgnoreProperties(ignoreUnknown = true, value= {"components"}) //TODO: participants with no component will give error while building JSON @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY) @JsonSubTypes({ @JsonSubTypes.Type(value = User.class, name = "User"), @@ -40,11 +38,17 @@ public abstract class Participant { @CreatedDate private Date creationDate; - @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "owner") + + @OneToMany(fetch = FetchType.LAZY, mappedBy = "owner") @JsonManagedReference(value = "participantAndComponent") + @JsonIgnore private List components = new ArrayList<>(); public Participant(){ } -} + + public void validate(){ + + } +} \ No newline at end of file diff --git a/src/main/java/edu/itu/cavabunga/core/entity/Property.java b/src/main/java/edu/itu/cavabunga/core/entity/Property.java index f8a1c2e..bfe0433 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/Property.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/Property.java @@ -3,8 +3,10 @@ import com.fasterxml.jackson.annotation.*; import edu.itu.cavabunga.core.entity.property.*; import edu.itu.cavabunga.core.entity.property.Class; +import edu.itu.cavabunga.exception.Validation; import lombok.Data; import org.hibernate.annotations.DiscriminatorOptions; +import org.omg.PortableServer.THREAD_POLICY_ID; import javax.persistence.*; import javax.persistence.Version; @@ -76,12 +78,12 @@ public abstract class Property { private String value; - @ManyToOne(cascade = CascadeType.ALL) + @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "component_id") @JsonBackReference private Component component; - @OneToMany(mappedBy = "property", cascade = CascadeType.ALL) + @OneToMany(mappedBy = "property", cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JsonManagedReference private List parameters = new ArrayList<>(); @@ -89,4 +91,145 @@ public void addParameter(Parameter parameter){ parameter.setProperty(this); parameters.add(parameter); } + + public void validate(){ + if(!this.parameters.isEmpty()){ + for(Parameter pr : this.parameters){ + try{ + pr.validate(); + }catch (Exception e){ + throw new Validation(this.getClass().getName() + " property class validation failed: " + e.getMessage()); + } + } + } + } + + public void validateMustHaveParameters(List parameterList){ + if(parameterList != null && !parameterList.isEmpty()) { + Integer instanceCount = parameterList.size(); + Integer foundInstance = 0; + for (Parameter pr : parameterList) { + for (Parameter search : parameters) { + if (pr.getClass().getName().equals(search.getClass().getName())) { + foundInstance++; + } + } + } + + if (foundInstance != instanceCount) { + throw new Validation(this.getClass().getName() + "property musthaveList is not valid"); + } + } + } + + public void validateCannotHaveParameters(List parameterList){ + if(parameterList != null && !parameterList.isEmpty()) { + for (Parameter pr : parameterList) { + for (Parameter search : parameters) { + if (pr.getClass().getName().equals(search.getClass().getName())) { + throw new Validation(this.getClass().getName() + " property cannot have child parameter of: " + search.getClass().getName()); + } + } + } + } + } + + public void validateValueType(PropertyValueType propertyValueType){ + if(propertyValueType != null) { + if (propertyValueType == PropertyValueType.BINARY) { + if (!value.matches("^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$")) { + throw new Validation(this.getClass().getName() + " value is not valid BINARY type"); + } + } + + if (propertyValueType == PropertyValueType.BOOLEAN) { + if (value != "TRUE" && value != "FALSE") { + throw new Validation(this.getClass().getName() + " value is not valid BOOLEAN type " + value); + } + } + + if (propertyValueType == PropertyValueType.CALADDRESS) { + //TODO: there is a full rfc about it: rfc3986 + } + + if (propertyValueType == PropertyValueType.DATE) { + String[] parts = value.split(","); + for (String part : parts) { + if (!part.matches("^[0-9]{8}$")) { + throw new Validation(this.getClass().getName() + " value is not valid DATE type " + value); + } + } + } + + if (propertyValueType == PropertyValueType.DATETIME) { + String[] parts = value.split(","); + for (String part : parts) { + if (!part.matches("^[0-9]{8}T[0-9]{6}|[0-9]{8}T[0-9]{6}Z")) { + throw new Validation(this.getClass().getName() + " value is not valid DATE-TIME type " + value); + } + } + } + + if (propertyValueType == PropertyValueType.DURATION) { + //TODO: rfc5545 pg 35 + } + + if (propertyValueType == PropertyValueType.FLOAT) { + String[] parts = value.split(","); + for (String part : parts) { + try { + Float f = Float.parseFloat(value); + } catch (NumberFormatException e) { + //TODO: GEO property has a value type in 'float;float' format !! + throw new Validation(this.getClass().getName() + " value is not valid FLOAT type " + value); + } + } + } + + if (propertyValueType == PropertyValueType.INTEGER) { + String[] parts = value.split(","); + for (String part : parts) { + try { + Integer i = Integer.parseInt(value); + } catch (NumberFormatException e) { + throw new Validation(this.getClass().getName() + " value is not valid INTEGER type" + value); + } + } + } + + if (propertyValueType == PropertyValueType.PERIOD) { + //TODO: rfc5545 pg 36 + } + + if (propertyValueType == PropertyValueType.RECUR) { + //TODO: rfc5545 pg 37-45 + } + + if (propertyValueType == PropertyValueType.TEXT) { + //TODO: rfc5545 pg 45 + } + + if (propertyValueType == PropertyValueType.TIME) { + String[] parts = value.split(","); + for (String part : parts) { + if (!part.matches("^[0-9]{6}$|^[0-9]{6}Z$")) { + throw new Validation(this.getClass().getName() + " value is not valid TIME type " + value); + } + } + } + + if (propertyValueType == PropertyValueType.URI) { + //TODO: there is a full rfc about it: rfc3986 + } + + if (propertyValueType == PropertyValueType.UTCOFFSET) { + String[] parts = value.split(","); + for (String part : parts) { + if (!part.matches("^[-+][0-9]{4}$|^[-+][0-9]{4}Z$")) { + throw new Validation(this.getClass().getName() + " value is not valid TIME type " + value); + } + } + } + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/component/Alarm.java b/src/main/java/edu/itu/cavabunga/core/entity/component/Alarm.java index ac6567f..fe02525 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/component/Alarm.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/component/Alarm.java @@ -1,13 +1,32 @@ package edu.itu.cavabunga.core.entity.component; import edu.itu.cavabunga.core.entity.Component; +import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.core.entity.property.PropertyType; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; +import java.util.ArrayList; +import java.util.List; @Entity public class Alarm extends Component{ @Override - public boolean validate(){ - return true; + public void validate(){ + if(!(this.getParent() instanceof Event) && !(this.getParent() instanceof Todo)){ + throw new Validation("Alarm component can only be child of Event and Todo, not: " + this.getParent().getClass().getName()); + } + + super.validate(); + + List requireOneList = new ArrayList(); + requireOneList.add(PropertyType.Action); + requireOneList.add(PropertyType.Trigger); + super.validateRequiredOneProperties(requireOneList); + + List optionalOneList = new ArrayList(); + optionalOneList.add(PropertyType.Due); + optionalOneList.add(PropertyType.Repeat); + super.validateOptionalOneProperties(optionalOneList); } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/component/Calendar.java b/src/main/java/edu/itu/cavabunga/core/entity/component/Calendar.java index 1537a47..17569c8 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/component/Calendar.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/component/Calendar.java @@ -1,13 +1,36 @@ package edu.itu.cavabunga.core.entity.component; import edu.itu.cavabunga.core.entity.Component; +import edu.itu.cavabunga.core.entity.Parameter; +import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.core.entity.property.Prodid; +import edu.itu.cavabunga.core.entity.property.PropertyType; +import edu.itu.cavabunga.core.entity.property.Version; +import edu.itu.cavabunga.exception.Validation; +import org.apache.commons.lang.Validate; import javax.persistence.Entity; +import java.util.ArrayList; +import java.util.List; @Entity public class Calendar extends Component { @Override - public boolean validate(){ - return true; + public void validate(){ + if(this.getParent() != null){ + throw new Validation("Calendar component cannot have parent component"); + } + + super.validate(); + + List optionalOneList = new ArrayList(); + optionalOneList.add(PropertyType.Calscale); + optionalOneList.add(PropertyType.Method); + super.validateOptionalOneProperties(optionalOneList); + + List requiredOneList = new ArrayList(); + requiredOneList.add(PropertyType.Prodid); + requiredOneList.add(PropertyType.Version); + super.validateRequiredOneProperties(requiredOneList); } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/component/Daylight.java b/src/main/java/edu/itu/cavabunga/core/entity/component/Daylight.java index af8a84a..37234cb 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/component/Daylight.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/component/Daylight.java @@ -1,13 +1,28 @@ package edu.itu.cavabunga.core.entity.component; import edu.itu.cavabunga.core.entity.Component; +import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.core.entity.property.PropertyType; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; +import java.util.ArrayList; +import java.util.List; @Entity public class Daylight extends Component{ @Override - public boolean validate(){ - return true; + public void validate(){ + if(!(this.getParent() instanceof Timezone)){ + throw new Validation("Daylight component cannot be child of :" + this.getParent().getClass().getName()); + } + + super.validate(); + + List requireOneList = new ArrayList(); + requireOneList.add(PropertyType.Dtstart); + requireOneList.add(PropertyType.Tzname); + requireOneList.add(PropertyType.Tzoffsetfrom); + super.validateRequiredOneProperties(requireOneList); } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/component/Event.java b/src/main/java/edu/itu/cavabunga/core/entity/component/Event.java index 95bf85b..efd7d8f 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/component/Event.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/component/Event.java @@ -1,13 +1,48 @@ package edu.itu.cavabunga.core.entity.component; import edu.itu.cavabunga.core.entity.Component; +import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.core.entity.property.Dtstamp; +import edu.itu.cavabunga.core.entity.property.PropertyType; +import edu.itu.cavabunga.core.entity.property.Uid; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; +import java.util.ArrayList; +import java.util.List; @Entity public class Event extends Component { @Override - public boolean validate(){ - return true; + public void validate(){ + if(!(this.getParent() instanceof Calendar)){ + throw new Validation("Event component cannot be child of: " + this.getParent().getClass().getName()); + } + + super.validate(); + + List optionalOneList = new ArrayList(); + optionalOneList.add(PropertyType.Class); + optionalOneList.add(PropertyType.Created); + optionalOneList.add(PropertyType.Description); + optionalOneList.add(PropertyType.Dtstamp); + optionalOneList.add(PropertyType.Dtstart); + optionalOneList.add(PropertyType.Geo); + optionalOneList.add(PropertyType.Lastmod); + optionalOneList.add(PropertyType.Location); + optionalOneList.add(PropertyType.Organizer); + optionalOneList.add(PropertyType.Priority); + optionalOneList.add(PropertyType.Recurid); + optionalOneList.add(PropertyType.Seq); + optionalOneList.add(PropertyType.Status); + optionalOneList.add(PropertyType.Summary); + optionalOneList.add(PropertyType.Transp); + optionalOneList.add(PropertyType.Uid); + optionalOneList.add(PropertyType.Url); + super.validateOptionalOneProperties(optionalOneList); + + List requiredOneList = new ArrayList(); + requiredOneList.add(PropertyType.Dtend); + super.validateRequiredOneProperties(requiredOneList); } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/component/Freebusy.java b/src/main/java/edu/itu/cavabunga/core/entity/component/Freebusy.java index 27cac16..bb2f80d 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/component/Freebusy.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/component/Freebusy.java @@ -1,13 +1,33 @@ package edu.itu.cavabunga.core.entity.component; import edu.itu.cavabunga.core.entity.Component; +import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.core.entity.property.PropertyType; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; +import java.util.ArrayList; +import java.util.List; @Entity public class Freebusy extends Component { @Override - public boolean validate(){ - return true; + public void validate(){ + if(!(this.getParent() instanceof Calendar)){ + throw new Validation("Freebusy component cannot be child of:" + this.getParent().getClass().getName()); + } + + super.validate(); + + List optionalOneList = new ArrayList(); + optionalOneList.add(PropertyType.Contact); + optionalOneList.add(PropertyType.Dtend); + optionalOneList.add(PropertyType.Dtstamp); + optionalOneList.add(PropertyType.Dtstart); + optionalOneList.add(PropertyType.Duration); + optionalOneList.add(PropertyType.Organizer); + optionalOneList.add(PropertyType.Uid); + optionalOneList.add(PropertyType.Url); + super.validateOptionalOneProperties(optionalOneList); } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/component/Journal.java b/src/main/java/edu/itu/cavabunga/core/entity/component/Journal.java index 6673022..13fb024 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/component/Journal.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/component/Journal.java @@ -1,13 +1,41 @@ package edu.itu.cavabunga.core.entity.component; import edu.itu.cavabunga.core.entity.Component; +import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.core.entity.property.Dtstamp; +import edu.itu.cavabunga.core.entity.property.PropertyType; +import edu.itu.cavabunga.core.entity.property.PropertyValueType; +import edu.itu.cavabunga.core.entity.property.Uid; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; +import java.util.ArrayList; +import java.util.List; @Entity public class Journal extends Component { @Override - public boolean validate(){ - return true; + public void validate(){ + if(!(this.getParent() instanceof Component)){ + throw new Validation("Journal component cannot be child of: " + this.getParent().getClass().getName()); + } + + super.validate(); + + List optionalOneList = new ArrayList(); + optionalOneList.add(PropertyType.Class); + optionalOneList.add(PropertyType.Created); + optionalOneList.add(PropertyType.Description); + optionalOneList.add(PropertyType.Dtstamp); + optionalOneList.add(PropertyType.Dtstart); + optionalOneList.add(PropertyType.Lastmod); + optionalOneList.add(PropertyType.Organizer); + optionalOneList.add(PropertyType.Recurid); + optionalOneList.add(PropertyType.Seq); + optionalOneList.add(PropertyType.Status); + optionalOneList.add(PropertyType.Summary); + optionalOneList.add(PropertyType.Uid); + optionalOneList.add(PropertyType.Url); + super.validateOptionalOneProperties(optionalOneList); } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/component/Standard.java b/src/main/java/edu/itu/cavabunga/core/entity/component/Standard.java index bf263ff..f763015 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/component/Standard.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/component/Standard.java @@ -1,13 +1,27 @@ package edu.itu.cavabunga.core.entity.component; import edu.itu.cavabunga.core.entity.Component; +import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.core.entity.property.PropertyType; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; +import java.util.ArrayList; +import java.util.List; @Entity public class Standard extends Component { @Override - public boolean validate(){ - return true; + public void validate(){ + if(!(this.getParent() instanceof Timezone)){ + throw new Validation("Standard component cannot be child of :" + this.getParent().getClass().getName()); + } + + super.validate(); + + List requireOneList = new ArrayList(); + requireOneList.add(PropertyType.Dtstart); + requireOneList.add(PropertyType.Tzname); + requireOneList.add(PropertyType.Tzoffsetfrom); } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/component/Timezone.java b/src/main/java/edu/itu/cavabunga/core/entity/component/Timezone.java index 8355274..e1bddf6 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/component/Timezone.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/component/Timezone.java @@ -1,13 +1,32 @@ package edu.itu.cavabunga.core.entity.component; import edu.itu.cavabunga.core.entity.Component; +import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.core.entity.property.PropertyType; +import edu.itu.cavabunga.core.entity.property.Tzid; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; +import java.util.ArrayList; +import java.util.List; @Entity public class Timezone extends Component { @Override - public boolean validate(){ - return true; + public void validate(){ + if(!(this.getParent() instanceof Calendar)){ + throw new Validation("Timezone component cannot be child of:" + this.getParent().getClass().getName()); + } + + super.validate(); + + List optionalOneList = new ArrayList(); + optionalOneList.add(PropertyType.Lastmod); + optionalOneList.add(PropertyType.Tzurl); + super.validateOptionalOneProperties(optionalOneList); + + List requiredOneList = new ArrayList(); + requiredOneList.add(PropertyType.Tzid); + super.validateRequiredOneProperties(requiredOneList); } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/component/Todo.java b/src/main/java/edu/itu/cavabunga/core/entity/component/Todo.java index 8ba6bc0..7657799 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/component/Todo.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/component/Todo.java @@ -1,13 +1,50 @@ package edu.itu.cavabunga.core.entity.component; import edu.itu.cavabunga.core.entity.Component; +import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.core.entity.property.Dtstamp; +import edu.itu.cavabunga.core.entity.property.PropertyType; +import edu.itu.cavabunga.core.entity.property.Uid; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; +import java.util.ArrayList; +import java.util.List; @Entity public class Todo extends Component{ @Override - public boolean validate(){ - return true; + public void validate(){ + if(!(this.getParent() instanceof Calendar)){ + throw new Validation("Todo component cannot be child of:" + this.getParent().getClass().getName()); + } + + super.validate(); + + List optionalOneList = new ArrayList(); + optionalOneList.add(PropertyType.Class); + optionalOneList.add(PropertyType.Completed); + optionalOneList.add(PropertyType.Created); + optionalOneList.add(PropertyType.Description); + optionalOneList.add(PropertyType.Dtstamp); + optionalOneList.add(PropertyType.Dtstart); + optionalOneList.add(PropertyType.Geo); + optionalOneList.add(PropertyType.Lastmod); + optionalOneList.add(PropertyType.Location); + optionalOneList.add(PropertyType.Organizer); + optionalOneList.add(PropertyType.Percent); + optionalOneList.add(PropertyType.Priority); + optionalOneList.add(PropertyType.Recurid); + optionalOneList.add(PropertyType.Seq); + optionalOneList.add(PropertyType.Status); + optionalOneList.add(PropertyType.Summary); + optionalOneList.add(PropertyType.Uid); + optionalOneList.add(PropertyType.Url); + super.validateOptionalOneProperties(optionalOneList); + + List requireOneList = new ArrayList(); + requireOneList.add(PropertyType.Due); + requireOneList.add(PropertyType.Duration); + super.validateRequiredOneProperties(requireOneList); } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Altrep.java b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Altrep.java index 47a17ae..c9c8a78 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Altrep.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Altrep.java @@ -1,9 +1,18 @@ package edu.itu.cavabunga.core.entity.parameter; import edu.itu.cavabunga.core.entity.Parameter; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Altrep extends Parameter { + @Override + public void validate(){ + super.validate(); + if(this.getValue().substring(0,1) != "\"" || this.getValue().substring(this.getValue().length() -1) != "\""){ + throw new Validation("ALTREP parameter must start and end with DQUOTE char."); + } + + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Cn.java b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Cn.java index 6c4b777..a8c721f 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Cn.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Cn.java @@ -1,9 +1,15 @@ package edu.itu.cavabunga.core.entity.parameter; import edu.itu.cavabunga.core.entity.Parameter; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Cn extends Parameter { + @Override + public void validate(){ + //TODO: This parameter can be specified on properties with a CAL-ADDRESS value type + super.validate(); + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Cutype.java b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Cutype.java index c3c10d6..49388d9 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Cutype.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Cutype.java @@ -1,9 +1,22 @@ package edu.itu.cavabunga.core.entity.parameter; import edu.itu.cavabunga.core.entity.Parameter; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Cutype extends Parameter { + @Override + public void validate(){ + //TODO: This parameter can be specified on properties with a CAL-ADDRESS value type + super.validate(); + if(this.getValue() != "INDIVIDUAL" && + this.getValue() != "GROUP" && + this.getValue() != "RESOURCE" && + this.getValue() != "ROOM" && + this.getValue() != "UNKNOWN"){ + throw new Validation("CUTYPE value is different from acceptable value range: " + this.getValue()); + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/parameter/DelegatedFrom.java b/src/main/java/edu/itu/cavabunga/core/entity/parameter/DelegatedFrom.java index eb0384f..9add9b2 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/parameter/DelegatedFrom.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/parameter/DelegatedFrom.java @@ -1,9 +1,19 @@ package edu.itu.cavabunga.core.entity.parameter; import edu.itu.cavabunga.core.entity.Parameter; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class DelegatedFrom extends Parameter { + @Override + public void validate(){ + //TODO: This parameter can be specified on properties with a CAL-ADDRESS value type + super.validate(); + if(this.getValue().substring(0,1) != "\"" || this.getValue().substring(this.getValue().length() -1) != "\""){ + throw new Validation("DELEGATED-FROM parameter must start and end with DQUOTE char."); + } + + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/parameter/DelegatedTo.java b/src/main/java/edu/itu/cavabunga/core/entity/parameter/DelegatedTo.java index 0de3ea1..bf8fb82 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/parameter/DelegatedTo.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/parameter/DelegatedTo.java @@ -1,9 +1,19 @@ package edu.itu.cavabunga.core.entity.parameter; import edu.itu.cavabunga.core.entity.Parameter; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class DelegatedTo extends Parameter { + @Override + public void validate(){ + //TODO: This parameter can be specified on properties with a CAL-ADDRESS value type + super.validate(); + if(this.getValue().substring(0,1) != "\"" || this.getValue().substring(this.getValue().length() -1) != "\""){ + throw new Validation("DELEGATED-TO parameter must start and end with DQUOTE char."); + } + + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Dir.java b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Dir.java index 5777565..11d26ca 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Dir.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Dir.java @@ -1,9 +1,18 @@ package edu.itu.cavabunga.core.entity.parameter; import edu.itu.cavabunga.core.entity.Parameter; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Dir extends Parameter { + @Override + public void validate(){ + //TODO: This parameter can be specified on properties with a CAL-ADDRESS value type + super.validate(); + if(this.getValue().substring(0,1) != "\"" || this.getValue().substring(this.getValue().length() -1) != "\""){ + throw new Validation("DIR parameter must start and end with DQUOTE char."); + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Encoding.java b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Encoding.java index 548738e..2e5749a 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Encoding.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Encoding.java @@ -1,9 +1,24 @@ package edu.itu.cavabunga.core.entity.parameter; import edu.itu.cavabunga.core.entity.Parameter; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Encoding extends Parameter { + @Override + public void validate(){ + super.validate(); + + if(this.getValue() != "BASE64" && this.getValue() != "8BIT"){ + throw new Validation("ENCODING value is different from acceptable value range: " + this.getValue()); + } + + for(Parameter pr : this.getProperty().getParameters()){ + if( (pr instanceof Value) && pr.getValue() == "BINARY" && this.getValue() != "BASE64"){ + throw new Validation("While VALUE parameter described as BINARY, ENCODING parameter MUST set as BASE64"); + } + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Fbtype.java b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Fbtype.java index c50f182..9822775 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Fbtype.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Fbtype.java @@ -1,9 +1,20 @@ package edu.itu.cavabunga.core.entity.parameter; import edu.itu.cavabunga.core.entity.Parameter; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Fbtype extends Parameter { + @Override + public void validate(){ + super.validate(); + if(this.getValue() != "FREE" && + this.getValue() != "BUSY" && + this.getValue() != "BUSY-UNAVAILABLE" && + this.getValue() != "BUSY-TENTATIVE"){ + throw new Validation("FBTYPE value is different from acceptable value range: " + this.getValue()); + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Fmttype.java b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Fmttype.java index 1a1729f..5cdc6fa 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Fmttype.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Fmttype.java @@ -1,9 +1,18 @@ package edu.itu.cavabunga.core.entity.parameter; import edu.itu.cavabunga.core.entity.Parameter; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Fmttype extends Parameter { + @Override + public void validate(){ + //TODO: This parameter can be specified on properties that are used to reference an object + super.validate(); + if(this.getValue().matches("(\\w+)/(\\w+)") != true){ + throw new Validation("FMTYPE must have valid mime type: " + this.getValue()); + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Language.java b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Language.java index 56d2226..f30a603 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Language.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Language.java @@ -1,9 +1,20 @@ package edu.itu.cavabunga.core.entity.parameter; import edu.itu.cavabunga.core.entity.Parameter; +import edu.itu.cavabunga.exception.Validation; +import org.apache.commons.lang.LocaleUtils; import javax.persistence.Entity; @Entity public class Language extends Parameter { + @Override + public void validate(){ + super.validate(); + try { + LocaleUtils.toLocale(this.getValue()); + }catch (IllegalArgumentException e){ + throw new Validation("Language parameter failed: " + e.getMessage()); + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Member.java b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Member.java index 505181a..3836b74 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Member.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Member.java @@ -1,9 +1,18 @@ package edu.itu.cavabunga.core.entity.parameter; import edu.itu.cavabunga.core.entity.Parameter; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Member extends Parameter{ + @Override + public void validate(){ + //TODO: This parameter can be specified on properties with a CAL-ADDRESS value type + super.validate(); + if(this.getValue().substring(0,1) != "\"" || this.getValue().substring(this.getValue().length() -1) != "\""){ + throw new Validation("MEMBER parameter must start and end with DQUOTE char."); + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Partstat.java b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Partstat.java index 450ce0f..8cdcea9 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Partstat.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Partstat.java @@ -1,9 +1,48 @@ package edu.itu.cavabunga.core.entity.parameter; import edu.itu.cavabunga.core.entity.Parameter; +import edu.itu.cavabunga.core.entity.component.Event; +import edu.itu.cavabunga.core.entity.component.Journal; +import edu.itu.cavabunga.core.entity.component.Todo; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Partstat extends Parameter { + @Override + public void validate(){ + //TODO: This parameter can be specified on properties with a CAL-ADDRESS value type + super.validate(); + + if(this.getProperty().getComponent() instanceof Event){ + if(this.getValue() != "NEEDS-ACTION" && + this.getValue() != "ACCEPTED" && + this.getValue() != "DECLINED" && + this.getValue() != "TENTATIVE" && + this.getValue() != "DELEGATED"){ + throw new Validation("PARTSTAT value is different from acceptable value range in an Event component: " + this.getValue()); + } + } + + if(this.getProperty().getComponent() instanceof Todo){ + if(this.getValue() != "NEEDS-ACTION" && + this.getValue() != "ACCEPTED" && + this.getValue() != "DECLINED" && + this.getValue() != "TENTATIVE" && + this.getValue() != "DELEGATED" && + this.getValue() != "COMPLETED" && + this.getValue() != "IN-PROCESS"){ + throw new Validation("PARTSTAT value is different from acceptable value range in a Todo component: " + this.getValue()); + } + } + + if(this.getProperty().getComponent() instanceof Journal){ + if(this.getValue() != "NEEDS-ACTION" && + this.getValue() != "ACCEPTED" && + this.getValue() != "DECLINED"){ + throw new Validation("PARTSTAT value is different from acceptable value range in a Journal component " + this.getValue()); + } + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Range.java b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Range.java index 19db0e3..9beaef9 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Range.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Range.java @@ -1,9 +1,20 @@ package edu.itu.cavabunga.core.entity.parameter; import edu.itu.cavabunga.core.entity.Parameter; +import edu.itu.cavabunga.exception.Validation; +import org.omg.PortableServer.THREAD_POLICY_ID; import javax.persistence.Entity; @Entity public class Range extends Parameter { + @Override + public void validate(){ + //TODO: This parameter can be specified on a property that specifies a recurrence identifier. + super.validate(); + + if(this.getValue() != "THISANDFUTURE"){ + throw new Validation("RANGE parameter can only have THISANDFUTURE value: " + this.getValue()); + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Related.java b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Related.java index 15a58e6..b5c68e4 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Related.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Related.java @@ -1,9 +1,18 @@ package edu.itu.cavabunga.core.entity.parameter; import edu.itu.cavabunga.core.entity.Parameter; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Related extends Parameter { + @Override + public void validate(){ + //TODO: This parameter can be specified on properties that specify an alarm trigger with a "DURATION" value type. + super.validate(); + if(this.getValue() != "START" && this.getValue() != "END"){ + throw new Validation("RELATED value is different from acceptable value range: " + this.getValue()); + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Reltype.java b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Reltype.java index 6472bb8..643fc47 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Reltype.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Reltype.java @@ -1,9 +1,20 @@ package edu.itu.cavabunga.core.entity.parameter; import edu.itu.cavabunga.core.entity.Parameter; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Reltype extends Parameter{ + @Override + public void validate(){ + //TODO: This parameter can be specified on properties with a CAL-ADDRESS value type + super.validate(); + if(this.getValue() != "PARENT" && + this.getValue() != "CHILD" && + this.getValue() != "SIBLING"){ + throw new Validation("RELTYPE value is different from acceptable value range: " + this.getValue()); + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Role.java b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Role.java index 1ce3f71..ecd732e 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Role.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Role.java @@ -1,9 +1,21 @@ package edu.itu.cavabunga.core.entity.parameter; import edu.itu.cavabunga.core.entity.Parameter; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Role extends Parameter { + @Override + public void validate(){ + //TODO: This parameter can be specified on properties with a CAL-ADDRESS value type. + super.validate(); + if(this.getValue() != "CHAIR" && + this.getValue() != "REQ-PARTICIPANT" && + this.getValue() != "OPT-PARTICIPANT" && + this.getValue() != "NON-PARTICIPANT"){ + throw new Validation("ROLE value is different from acceptable value range: " + this.getValue()); + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Rsvp.java b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Rsvp.java index 266f4cd..e91d621 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Rsvp.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Rsvp.java @@ -1,9 +1,19 @@ package edu.itu.cavabunga.core.entity.parameter; import edu.itu.cavabunga.core.entity.Parameter; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Rsvp extends Parameter { + @Override + public void validate(){ + //TODO: This parameter can be specified on properties with a CAL-ADDRESS value type. + super.validate(); + if(this.getValue() != "TRUE" && + this.getValue() != "FALSE"){ + throw new Validation("RSVP value is different from acceptable value range: " + this.getValue()); + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/parameter/SentBy.java b/src/main/java/edu/itu/cavabunga/core/entity/parameter/SentBy.java index e16ac9a..6072557 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/parameter/SentBy.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/parameter/SentBy.java @@ -1,9 +1,19 @@ package edu.itu.cavabunga.core.entity.parameter; import edu.itu.cavabunga.core.entity.Parameter; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class SentBy extends Parameter { + @Override + public void validate(){ + //TODO:This parameter can be specified on properties with a CAL-ADDRESS value type + super.validate(); + if(this.getValue().substring(0,1) != "\"" || this.getValue().substring(this.getValue().length() -1) != "\""){ + throw new Validation("SENT-BY parameter must start and end with DQUOTE char."); + } + + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Tzid.java b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Tzid.java index ec89665..8656394 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Tzid.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Tzid.java @@ -1,9 +1,27 @@ package edu.itu.cavabunga.core.entity.parameter; import edu.itu.cavabunga.core.entity.Parameter; +import edu.itu.cavabunga.core.entity.component.Calendar; +import edu.itu.cavabunga.core.entity.property.*; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Tzid extends Parameter { + @Override + public void validate(){ + super.validate(); + if(!(this.getProperty() instanceof Dtstart) && + !(this.getProperty() instanceof Dtend) && + !(this.getProperty() instanceof Due) && + !(this.getProperty() instanceof Exdate) && + !(this.getProperty() instanceof Rdate)){ + throw new Validation("TZID parameter can only be use in Dtstart, Dtend, Due, Exdate and Rdate properties: " + this.getProperty().getClass().getName()); + } + + //TODO: Validate TZID string matches with the Calendar's VTIMEZONE component's TZID identifier + + + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Value.java b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Value.java index c7cb575..1189889 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/parameter/Value.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/parameter/Value.java @@ -1,9 +1,30 @@ package edu.itu.cavabunga.core.entity.parameter; import edu.itu.cavabunga.core.entity.Parameter; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Value extends Parameter{ + @Override + public void validate(){ + super.validate(); + if(this.getValue() != "BINARY" && + this.getValue() != "BOOLEAN" && + this.getValue() != "CAL-ADDRESS" && + this.getValue() != "DATE-TIME" && + this.getValue() != "DATE" && + this.getValue() != "DURATION" && + this.getValue() != "FLOAT" && + this.getValue() != "INTEGER" && + this.getValue() != "PERIOD" && + this.getValue() != "RECUR" && + this.getValue() != "TEXT" && + this.getValue() != "TIME" && + this.getValue() != "URI" && + this.getValue() != "UTC-OFFSET"){ + throw new Validation("VALUE value is different from acceptable value range: " + this.getValue()); + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Acknowledged.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Acknowledged.java index da04bef..f5cd738 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Acknowledged.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Acknowledged.java @@ -1,9 +1,28 @@ package edu.itu.cavabunga.core.entity.property; +import edu.itu.cavabunga.core.entity.Parameter; import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.core.entity.component.Alarm; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Acknowledged extends Property { + @Override + public void validate(){ + if(this.getValue().trim() != ""){ + throw new Validation("ACKNOWLEDGED property cannot be empty"); + } + + if(!this.getParameters().isEmpty()){ + for(Parameter pr : this.getParameters()){ + try { + pr.validate(); + }catch (Exception e){ + throw new Validation("ACKNOWLEDGED parameter validation failed: " + pr.getValue()); + } + } + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Action.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Action.java index fdff513..1366874 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Action.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Action.java @@ -1,9 +1,23 @@ package edu.itu.cavabunga.core.entity.property; +import edu.itu.cavabunga.core.entity.Parameter; import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.core.entity.component.Alarm; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Action extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.TEXT); + + if(this.getValue() != "AUDIO" && + this.getValue() != "DISPLAY" && + this.getValue() != "EMAIL"){ + throw new Validation("ACTION value is different from acceptable value range: " + this.getValue()); + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Attach.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Attach.java index fc2f25b..66dcbc2 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Attach.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Attach.java @@ -1,9 +1,21 @@ package edu.itu.cavabunga.core.entity.property; +import edu.itu.cavabunga.core.entity.Parameter; import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.core.entity.component.Alarm; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Attach extends Property { + @Override + public void validate(){ + super.validate(); + try { + super.validateValueType(PropertyValueType.URI); + }catch (Exception e){ + super.validateValueType(PropertyValueType.BINARY); + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Attendee.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Attendee.java index 8973f92..f66ca3b 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Attendee.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Attendee.java @@ -1,9 +1,19 @@ package edu.itu.cavabunga.core.entity.property; +import edu.itu.cavabunga.core.entity.Parameter; import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.core.entity.component.Alarm; +import edu.itu.cavabunga.core.entity.component.Freebusy; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Attendee extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.CALADDRESS); + } + } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Calscale.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Calscale.java index 2f8fed1..4dd85e3 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Calscale.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Calscale.java @@ -1,9 +1,24 @@ package edu.itu.cavabunga.core.entity.property; +import edu.itu.cavabunga.core.entity.Parameter; import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.core.entity.component.Alarm; +import edu.itu.cavabunga.core.entity.component.Calendar; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; +import java.util.List; @Entity public class Calscale extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.TEXT); + + //TODO: is cavabunga support only for Gregorian calendar? + if(this.getValue() != "GREGORIAN" ){ + throw new Validation("CALSCALE value is different from acceptable value range: " + this.getValue()); + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Catagories.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Catagories.java index 643c509..580ca61 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Catagories.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Catagories.java @@ -1,9 +1,17 @@ package edu.itu.cavabunga.core.entity.property; +import edu.itu.cavabunga.core.entity.Parameter; import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.core.entity.component.Alarm; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Catagories extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.TEXT); + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Class.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Class.java index a34ba5f..1fccfea 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Class.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Class.java @@ -1,9 +1,23 @@ package edu.itu.cavabunga.core.entity.property; +import edu.itu.cavabunga.core.entity.Parameter; import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.core.entity.component.Alarm; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Class extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.TEXT); + + if(this.getValue() != "PUBLIC" && + this.getValue() != "PRIVATE" && + this.getValue() != "CONFIDENTIAL"){ + throw new Validation("CLASS value is different from acceptable value range: " + this.getValue()); + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Comment.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Comment.java index 71166ee..7936c28 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Comment.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Comment.java @@ -1,9 +1,16 @@ package edu.itu.cavabunga.core.entity.property; +import edu.itu.cavabunga.core.entity.Parameter; import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Comment extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.TEXT); + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Completed.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Completed.java index 74a6b74..8d9d595 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Completed.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Completed.java @@ -1,9 +1,18 @@ package edu.itu.cavabunga.core.entity.property; +import edu.itu.cavabunga.core.entity.Parameter; import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.core.entity.component.Alarm; +import edu.itu.cavabunga.core.entity.component.Todo; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Completed extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.DATETIME); + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Contact.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Contact.java index f212db7..62fdd41 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Contact.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Contact.java @@ -1,9 +1,17 @@ package edu.itu.cavabunga.core.entity.property; +import edu.itu.cavabunga.core.entity.Parameter; import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.core.entity.component.Todo; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Contact extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.TEXT); + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Country.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Country.java index 0c607b7..22a1b5d 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Country.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Country.java @@ -6,4 +6,9 @@ @Entity public class Country extends Property { + //TODO: check rfc5545 to confirm if it exists + @Override + public void validate(){ + + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Created.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Created.java index c6647d3..354fe7e 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Created.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Created.java @@ -1,9 +1,16 @@ package edu.itu.cavabunga.core.entity.property; +import edu.itu.cavabunga.core.entity.Parameter; import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Created extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.DATETIME); + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Description.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Description.java index b340dda..e77a301 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Description.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Description.java @@ -1,9 +1,21 @@ package edu.itu.cavabunga.core.entity.property; +import edu.itu.cavabunga.core.entity.Parameter; import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.core.entity.component.Alarm; +import edu.itu.cavabunga.core.entity.component.Event; +import edu.itu.cavabunga.core.entity.component.Journal; +import edu.itu.cavabunga.core.entity.component.Todo; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; +import java.util.concurrent.ExecutionException; @Entity public class Description extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.TEXT); + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Dtend.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Dtend.java index 3c67170..3aa16b1 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Dtend.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Dtend.java @@ -1,9 +1,20 @@ package edu.itu.cavabunga.core.entity.property; +import edu.itu.cavabunga.core.entity.Parameter; import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Dtend extends Property { + @Override + public void validate(){ + super.validate(); + try { + super.validateValueType(PropertyValueType.DATETIME); + }catch (Validation e){ + super.validateValueType(PropertyValueType.DATE); + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Dtstamp.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Dtstamp.java index 49f71d6..6744764 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Dtstamp.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Dtstamp.java @@ -1,9 +1,16 @@ package edu.itu.cavabunga.core.entity.property; +import edu.itu.cavabunga.core.entity.Parameter; import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Dtstamp extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.DATETIME); + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Dtstart.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Dtstart.java index 706b364..e7a029b 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Dtstart.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Dtstart.java @@ -1,9 +1,19 @@ package edu.itu.cavabunga.core.entity.property; import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Dtstart extends Property { + @Override + public void validate(){ + super.validate(); + try { + super.validateValueType(PropertyValueType.DATETIME); + }catch (Validation e){ + super.validateValueType(PropertyValueType.DATE); + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Due.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Due.java index cfef479..e5c538b 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Due.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Due.java @@ -1,9 +1,19 @@ package edu.itu.cavabunga.core.entity.property; import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Due extends Property { + @Override + public void validate(){ + super.validate(); + try { + super.validateValueType(PropertyValueType.DATETIME); + }catch (Validation e){ + super.validateValueType(PropertyValueType.DATE); + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Duration.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Duration.java index 8711204..380b59d 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Duration.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Duration.java @@ -6,4 +6,9 @@ @Entity public class Duration extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.DURATION); + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Exdate.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Exdate.java index 786d7f9..bf853c3 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Exdate.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Exdate.java @@ -1,9 +1,19 @@ package edu.itu.cavabunga.core.entity.property; import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Exdate extends Property { + @Override + public void validate(){ + super.validate(); + try { + super.validateValueType(PropertyValueType.DATETIME); + }catch (Validation e){ + super.validateValueType(PropertyValueType.DATE); + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Freebusy.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Freebusy.java index 97b291e..2918ee0 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Freebusy.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Freebusy.java @@ -6,4 +6,9 @@ @Entity public class Freebusy extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.PERIOD); + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Geo.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Geo.java index 6d630b3..2db6eb2 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Geo.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Geo.java @@ -6,4 +6,9 @@ @Entity public class Geo extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.FLOAT); + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Lastmod.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Lastmod.java index a348b9d..2b06b81 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Lastmod.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Lastmod.java @@ -6,4 +6,10 @@ @Entity public class Lastmod extends Property { + //TODO: LAST-MODIFIED Class name change + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.DATETIME); + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Location.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Location.java index 3859b78..027a4b9 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Location.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Location.java @@ -6,4 +6,9 @@ @Entity public class Location extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.TEXT); + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Method.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Method.java index 279dc44..b19157d 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Method.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Method.java @@ -6,4 +6,9 @@ @Entity public class Method extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.TEXT); + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Organizer.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Organizer.java index 900e28e..c895936 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Organizer.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Organizer.java @@ -6,4 +6,9 @@ @Entity public class Organizer extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.CALADDRESS); + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Percent.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Percent.java index f8885a2..1a4f3cf 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Percent.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Percent.java @@ -1,9 +1,19 @@ package edu.itu.cavabunga.core.entity.property; import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Percent extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.INTEGER); + + if(Integer.parseInt(this.getValue()) > 0 | Integer.parseInt(this.getValue()) < 0){ + throw new Validation("PERCENT property must be in range of 0 to 100: " + this.getValue()); + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Priority.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Priority.java index 00f1f53..ccebce9 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Priority.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Priority.java @@ -6,4 +6,9 @@ @Entity public class Priority extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.INTEGER); + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Prodid.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Prodid.java index def8f22..4d3dab5 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Prodid.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Prodid.java @@ -6,4 +6,9 @@ @Entity public class Prodid extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.TEXT); + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/PropertyValueType.java b/src/main/java/edu/itu/cavabunga/core/entity/property/PropertyValueType.java new file mode 100644 index 0000000..90ea626 --- /dev/null +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/PropertyValueType.java @@ -0,0 +1,29 @@ +package edu.itu.cavabunga.core.entity.property; + +public enum PropertyValueType { + BINARY("BINARY"), + BOOLEAN("BOOLEAN"), + CALADDRESS("CAL-ADDRESS"), + DATE("DATE"), + DATETIME("DATE-TIME"), + DURATION("DURATION"), + FLOAT("FLOAT"), + INTEGER("INTEGER"), + PERIOD("PERIOD"), + RECUR("RECUR"), + TEXT("TEXT"), + TIME("TIME"), + URI("URI"), + UTCOFFSET("UTC-OFFSET"); + + private final String value; + + PropertyValueType(final String text){ + this.value = text; + } + + @Override + public String toString(){ + return value; + } +} diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Rdate.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Rdate.java index 55159d7..c1dcb08 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Rdate.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Rdate.java @@ -1,9 +1,19 @@ package edu.itu.cavabunga.core.entity.property; import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Rdate extends Property { + @Override + public void validate(){ + super.validate(); + try { + super.validateValueType(PropertyValueType.DATETIME); + }catch (Validation e){ + super.validateValueType(PropertyValueType.DATE); + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Recurid.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Recurid.java index df26bd2..cc3085f 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Recurid.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Recurid.java @@ -1,9 +1,19 @@ package edu.itu.cavabunga.core.entity.property; import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Recurid extends Property { + @Override + public void validate(){ + super.validate(); + try { + super.validateValueType(PropertyValueType.DATETIME); + }catch (Validation e){ + super.validateValueType(PropertyValueType.DATE); + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Related.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Related.java index af1d607..49eeb3e 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Related.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Related.java @@ -5,5 +5,7 @@ import javax.persistence.Entity; @Entity +//TODO: could be RELATED-TO ?? Class name change public class Related extends Property { + //TODO: implement Related-To } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Repeat.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Repeat.java index a6bf322..e7ab1aa 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Repeat.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Repeat.java @@ -1,9 +1,15 @@ package edu.itu.cavabunga.core.entity.property; import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Repeat extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.INTEGER); + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Resources.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Resources.java index 1e9dbc2..e0156ea 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Resources.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Resources.java @@ -6,4 +6,9 @@ @Entity public class Resources extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.TEXT); + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Rrule.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Rrule.java index da5704d..4cd0e7e 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Rrule.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Rrule.java @@ -1,9 +1,15 @@ package edu.itu.cavabunga.core.entity.property; import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Rrule extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.RECUR); + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Seq.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Seq.java index 220169f..5542f3d 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Seq.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Seq.java @@ -6,4 +6,10 @@ @Entity public class Seq extends Property { +//TODO: implement SEQUENCE + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.INTEGER); + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Status.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Status.java index 5cac2d9..d190fd8 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Status.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Status.java @@ -1,9 +1,27 @@ package edu.itu.cavabunga.core.entity.property; import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Status extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.TEXT); + + if(!this.getValue().equals("TENTATIVE") && + !this.getValue().equals("CONFIRMED") && + !this.getValue().equals("CANCELLED") && + !this.getValue().equals("NEEDS-ACTION") && + !this.getValue().equals("COMPLETED") && + !this.getValue().equals("IN-PROCESS") && + !this.getValue().equals("COMPLETED") && + !this.getValue().equals("DRAFT") && + !this.getValue().equals("FINAL")){ + throw new Validation("STATUS property is out of acceptable range: " + this.getValue()); + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Summary.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Summary.java index 44401ae..a404a02 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Summary.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Summary.java @@ -6,4 +6,9 @@ @Entity public class Summary extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.TEXT); + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Transp.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Transp.java index bf1d3e1..2d52bd4 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Transp.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Transp.java @@ -1,9 +1,20 @@ package edu.itu.cavabunga.core.entity.property; import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Transp extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.TEXT); + + if(!this.getValue().equals("OPAQUE") && + !this.getValue().equals("TRANSPARENT")){ + throw new Validation("TRANSP property value is out of acceptable range: " + this.getValue()); + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Trigger.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Trigger.java index 1f26de3..b114a60 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Trigger.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Trigger.java @@ -1,9 +1,19 @@ package edu.itu.cavabunga.core.entity.property; import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Trigger extends Property { + @Override + public void validate(){ + super.validate(); + try { + super.validateValueType(PropertyValueType.DURATION); + }catch (Validation e){ + super.validateValueType(PropertyValueType.DATETIME); + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Tzid.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Tzid.java index de4c277..119f6dc 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Tzid.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Tzid.java @@ -6,4 +6,9 @@ @Entity public class Tzid extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.TEXT); + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Tzname.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Tzname.java index c31e020..29481d5 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Tzname.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Tzname.java @@ -6,4 +6,9 @@ @Entity public class Tzname extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.TEXT); + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Tzoffsetfrom.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Tzoffsetfrom.java index 74e5408..bbfe399 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Tzoffsetfrom.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Tzoffsetfrom.java @@ -6,4 +6,9 @@ @Entity public class Tzoffsetfrom extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.UTCOFFSET); + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Tzoffsetto.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Tzoffsetto.java index f735fa8..3a2322e 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Tzoffsetto.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Tzoffsetto.java @@ -6,4 +6,9 @@ @Entity public class Tzoffsetto extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.UTCOFFSET); + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Tzurl.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Tzurl.java index a16e2f2..30aaa51 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Tzurl.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Tzurl.java @@ -6,4 +6,9 @@ @Entity public class Tzurl extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.URI); + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Uid.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Uid.java index 810acba..c6cb8b6 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Uid.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Uid.java @@ -6,4 +6,9 @@ @Entity public class Uid extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.TEXT); + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Url.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Url.java index 28af40e..bb439e5 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Url.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Url.java @@ -6,4 +6,9 @@ @Entity public class Url extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.URI); + } } diff --git a/src/main/java/edu/itu/cavabunga/core/entity/property/Version.java b/src/main/java/edu/itu/cavabunga/core/entity/property/Version.java index a5defce..fda7138 100755 --- a/src/main/java/edu/itu/cavabunga/core/entity/property/Version.java +++ b/src/main/java/edu/itu/cavabunga/core/entity/property/Version.java @@ -1,9 +1,20 @@ package edu.itu.cavabunga.core.entity.property; import edu.itu.cavabunga.core.entity.Property; +import edu.itu.cavabunga.exception.Validation; import javax.persistence.Entity; @Entity public class Version extends Property { + @Override + public void validate(){ + super.validate(); + super.validateValueType(PropertyValueType.TEXT); + + //cavabunga will not support ical version other then 2.0 + if(!this.getValue().equals("2.0")){ + throw new Validation("Version cannot be other then 2.0"); + } + } } diff --git a/src/main/java/edu/itu/cavabunga/core/service/IcalService.java b/src/main/java/edu/itu/cavabunga/core/service/IcalService.java index 6e21428..8d86154 100755 --- a/src/main/java/edu/itu/cavabunga/core/service/IcalService.java +++ b/src/main/java/edu/itu/cavabunga/core/service/IcalService.java @@ -100,4 +100,4 @@ public interface IcalService { * @param id parameter id to delete */ void deleteParameterById(Long id); -} +} \ No newline at end of file diff --git a/src/main/java/edu/itu/cavabunga/core/service/IcalServiceImpl.java b/src/main/java/edu/itu/cavabunga/core/service/IcalServiceImpl.java index a8baab0..ede1ad9 100755 --- a/src/main/java/edu/itu/cavabunga/core/service/IcalServiceImpl.java +++ b/src/main/java/edu/itu/cavabunga/core/service/IcalServiceImpl.java @@ -46,12 +46,12 @@ public class IcalServiceImpl implements IcalService { */ @Autowired public IcalServiceImpl( - ComponentFactory componentFactory, - ComponentRepository componentRepository, - PropertyFactory propertyFactory, - PropertyRepository propertyRepository, - ParameterFactory parameterFactory, - ParameterRepository parameterRepository + ComponentFactory componentFactory, + ComponentRepository componentRepository, + PropertyFactory propertyFactory, + PropertyRepository propertyRepository, + ParameterFactory parameterFactory, + ParameterRepository parameterRepository ) { this.componentFactory = componentFactory; this.componentRepository = componentRepository; @@ -174,4 +174,4 @@ public void saveParameter(Parameter parameter){ public void deleteParameterById(Long id){ parameterRepository.delete(id); } -} +} \ No newline at end of file diff --git a/src/main/java/edu/itu/cavabunga/core/service/ParticipantServiceImpl.java b/src/main/java/edu/itu/cavabunga/core/service/ParticipantServiceImpl.java index f4d44e5..5514815 100755 --- a/src/main/java/edu/itu/cavabunga/core/service/ParticipantServiceImpl.java +++ b/src/main/java/edu/itu/cavabunga/core/service/ParticipantServiceImpl.java @@ -6,6 +6,7 @@ import edu.itu.cavabunga.core.repository.ParticipantRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Optional; @@ -42,7 +43,7 @@ public ParticipantServiceImpl( public Participant createParticipant(String userName, ParticipantType participantType){ Participant newParticipant = participantFactory.createParticipant(participantType); newParticipant.setUserName(userName); - participantRepository.save(newParticipant); + //participantRepository.save(newParticipant); //TODO: no need to create just create, while you saving: it will give error "New participant cannot have id field" return newParticipant; } @@ -50,6 +51,7 @@ public Participant createParticipant(String userName, ParticipantType participan * {@inheritDoc} */ @Override + @Transactional public void saveParticipant(Participant participant){ participantRepository.save(participant); } diff --git a/src/main/java/edu/itu/cavabunga/exception/Conflict.java b/src/main/java/edu/itu/cavabunga/exception/Conflict.java index 227b5bd..4991794 100755 --- a/src/main/java/edu/itu/cavabunga/exception/Conflict.java +++ b/src/main/java/edu/itu/cavabunga/exception/Conflict.java @@ -1,7 +1,6 @@ package edu.itu.cavabunga.exception; public class Conflict extends RuntimeException { - public Conflict(){ } @@ -12,7 +11,4 @@ public Conflict(String message){ public Conflict(Throwable cause){ super(cause); } - - - } diff --git a/src/main/java/edu/itu/cavabunga/exception/NotFound.java b/src/main/java/edu/itu/cavabunga/exception/NotFound.java index f3ceb35..85b1a57 100755 --- a/src/main/java/edu/itu/cavabunga/exception/NotFound.java +++ b/src/main/java/edu/itu/cavabunga/exception/NotFound.java @@ -8,10 +8,7 @@ public NotFound(){ public NotFound(String message){ super(message); } - public NotFound(Throwable cause){ super(cause); } - - } diff --git a/src/main/java/edu/itu/cavabunga/exception/Validation.java b/src/main/java/edu/itu/cavabunga/exception/Validation.java new file mode 100644 index 0000000..dea12fd --- /dev/null +++ b/src/main/java/edu/itu/cavabunga/exception/Validation.java @@ -0,0 +1,10 @@ +package edu.itu.cavabunga.exception; + +public class Validation extends RuntimeException { + public Validation(){ + + } + + public Validation(String message) { super(message); } + public Validation(Throwable cause) { super(cause); } +}