blob: 8a0a88c48264551b91d721b56ecd74a9c1dad759 [file] [log] [blame]
/*
* Copyright 2007 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.sample.dynatablerf.domain;
import static com.google.gwt.sample.dynatablerf.shared.DynaTableRequestFactory.SchoolCalendarRequest.ALL_DAYS;
import com.google.gwt.sample.dynatablerf.server.SchoolCalendarService;
import java.util.List;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
/**
* Hold relevant data for Person.
*/
public class Person {
/**
* New instances could be created on the client, but it's a better demo to
* send back a Person with a bunch of dummy data.
*/
public static Person createPerson() {
return SchoolCalendarService.createPerson();
}
/**
* The RequestFactory requires a static finder method for each proxied type.
* Soon it should allow you to customize how instances are found.
*/
public static Person findPerson(String id) {
/*
* TODO At the moment requestFactory requires a finder method per type It
* should get more flexible soon.
*/
return SchoolCalendarService.findPerson(id);
}
@NotNull
private Address address = new Address();
@NotNull
private Schedule classSchedule = new Schedule();
@NotNull
private String description = "DESC";
private Person mentor;
@NotNull
@Size(min = 2, message = "Persons aren't just characters")
private String name;
// May be null if the person is newly-created
private String id;
@NotNull
@DecimalMin("0")
private Integer version = 0;
private String note;
private List<Boolean> daysFilters = ALL_DAYS;
public Person() {
}
protected Person(Person copyFrom) {
copyFrom(copyFrom);
}
public void copyFrom(Person copyFrom) {
address.copyFrom(copyFrom.address);
classSchedule = copyFrom.classSchedule;
description = copyFrom.description;
name = copyFrom.name;
mentor = copyFrom.mentor;
id = copyFrom.id;
version = copyFrom.version;
note = copyFrom.note;
}
public Address getAddress() {
return address;
}
public Schedule getClassSchedule() {
return classSchedule;
}
public String getDescription() {
return description;
}
/**
* The RequestFactory requires a Long id property for each proxied type.
* <p>
* The requirement for some kind of id object with proper hash / equals
* semantics is not going away, but it should become possible to use types
* other than Long, and properties other than "id".
*/
public String getId() {
return id;
}
public Person getMentor() {
return mentor;
}
public String getName() {
return name;
}
public String getNote() {
return note;
}
public String getScheduleDescription() {
return getScheduleWithFilter(daysFilters);
}
public String getScheduleWithFilter(List<Boolean> daysFilter) {
return classSchedule.getDescription(daysFilter);
}
/**
* The RequestFactory requires an Integer version property for each proxied
* type, but makes no good use of it. This requirement will be removed soon.
*/
public Integer getVersion() {
return version;
}
public Person makeCopy() {
return new Person(this);
}
public void persist() {
SchoolCalendarService.persist(this);
}
public void setAddress(Address address) {
this.address = address;
}
public void setClassSchedule(Schedule schedule) {
this.classSchedule = schedule;
}
public void setDaysFilter(List<Boolean> daysFilter) {
assert daysFilter.size() == this.daysFilters.size();
this.daysFilters = daysFilter;
}
public void setDescription(String description) {
this.description = description;
}
public void setId(String id) {
this.id = id;
}
public void setMentor(Person mentor) {
this.mentor = mentor;
}
public void setName(String name) {
this.name = name;
}
public void setNote(String note) {
this.note = note;
}
public void setVersion(Integer version) {
this.version = version;
}
@Override
public String toString() {
return "Person [description=" + description + ", id=" + id + ", name="
+ name + ", version=" + version + "]";
}
}