/*
* Copyright 2010-2015 the original author or authors.
*
* 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 org.springframework.data.mongodb.repository;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import org.springframework.data.geo.Point;
import org.springframework.data.mongodb.core.index.GeoSpatialIndexType;
import org.springframework.data.mongodb.core.index.GeoSpatialIndexed;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.DBRef;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
/**
* Sample domain class.
*
* @author Oliver Gierke
* @author Thomas Darimont
* @author Christoph Strobl
*/
@Document
public class Person extends Contact {
public enum Sex {
MALE, FEMALE;
}
private String firstname;
private String lastname;
@Indexed(unique = true, dropDups = true) private String email;
private Integer age;
@SuppressWarnings("unused") private Sex sex;
Date createdAt;
List<String> skills;
@GeoSpatialIndexed(type = GeoSpatialIndexType.GEO_2DSPHERE) private Point location;
private @Field("add") Address address;
private Set<Address> shippingAddresses;
@DBRef User creator;
@DBRef(lazy = true) User coworker;
@DBRef(lazy = true) List<User> fans;
@DBRef(lazy = true) ArrayList<User> realFans;
Credentials credentials;
public Person() {
this(null, null);
}
public Person(String firstname, String lastname) {
this(firstname, lastname, null);
}
public Person(String firstname, String lastname, Integer age) {
this(firstname, lastname, age, Sex.MALE);
}
public Person(String firstname, String lastname, Integer age, Sex sex) {
super();
this.firstname = firstname;
this.lastname = lastname;
this.age = age;
this.sex = sex;
this.email = (firstname == null ? "noone" : firstname.toLowerCase()) + "@dmband.com";
this.createdAt = new Date();
}
/**
* @return the firstname
*/
public String getFirstname() {
return firstname;
}
/**
* @param firstname the firstname to set
*/
public void setFirstname(String firstname) {
this.firstname = firstname;
}
/**
* @return the lastname
*/
public String getLastname() {
return lastname;
}
/**
* @param lastname the lastname to set
*/
public void setLastname(String lastname) {
this.lastname = lastname;
}
/**
* @return the email
*/
public String getEmail() {
return email;
}
/**
* @param email the email to set
*/
public void setEmail(String email) {
this.email = email;
}
/**
* @return the age
*/
public Integer getAge() {
return age;
}
/**
* @param age the age to set
*/
public void setAge(Integer age) {
this.age = age;
}
/**
* @return the location
*/
public Point getLocation() {
return location;
}
/**
* @param location the location to set
*/
public void setLocation(Point location) {
this.location = location;
}
/**
* @return the address
*/
public Address getAddress() {
return address;
}
/**
* @param address the address to set
*/
public void setAddress(Address address) {
this.address = address;
}
/**
* @return the addresses
*/
public Set<Address> getShippingAddresses() {
return shippingAddresses;
}
/**
* @param addresses the addresses to set
*/
public void setShippingAddresses(Set<Address> addresses) {
this.shippingAddresses = addresses;
}
/* (non-Javadoc)
* @see org.springframework.data.mongodb.repository.Contact#getName()
*/
public String getName() {
return String.format("%s %s", firstname, lastname);
}
/**
* @return the fans
*/
public List<User> getFans() {
return fans;
}
/**
* @param fans the fans to set
*/
public void setFans(List<User> fans) {
this.fans = fans;
}
/**
* @return the realFans
*/
public ArrayList<User> getRealFans() {
return realFans;
}
/**
* @param realFans the realFans to set
*/
public void setRealFans(ArrayList<User> realFans) {
this.realFans = realFans;
}
/**
* @return the coworker
*/
public User getCoworker() {
return coworker;
}
/**
* @param coworker the coworker to set
*/
public void setCoworker(User coworker) {
this.coworker = coworker;
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || !getClass().equals(obj.getClass())) {
return false;
}
Person that = (Person) obj;
return this.getId().equals(that.getId());
}
public Person withAddress(Address address) {
this.address = address;
return this;
}
public void setCreator(User creator) {
this.creator = creator;
}
public void setSkills(List<String> skills) {
this.skills = skills;
}
public List<String> getSkills() {
return skills;
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
return getId().hashCode();
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return String.format("%s %s", firstname, lastname);
}
}