Person notes

master
Markus Kreth 6 years ago
parent e8f0612912
commit 4bec3c1ed8
  1. 6
      pom.xml
  2. 12
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/data/Person.java
  3. 122
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/data/PersonNote.java
  4. 64
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/NotesComponent.java
  5. 7
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonEditDetails.java

@ -6,16 +6,12 @@
<groupId>de.kreth.vaadin.clubhelper</groupId> <groupId>de.kreth.vaadin.clubhelper</groupId>
<artifactId>vaadin-clubhelper</artifactId> <artifactId>vaadin-clubhelper</artifactId>
<version>1.3.1-SNAPSHOT</version> <version>1.3.2-SNAPSHOT</version>
<packaging>war</packaging> <packaging>war</packaging>
<name>vaadin-clubhelper</name> <name>vaadin-clubhelper</name>
<description>Vaadin Administation Frontend for Clubhelper.</description> <description>Vaadin Administation Frontend for Clubhelper.</description>
<prerequisites>
<maven>3</maven>
</prerequisites>
<parent> <parent>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId> <artifactId>spring-boot-starter-parent</artifactId>

@ -77,6 +77,11 @@ public class Person extends BaseEntity implements Serializable {
CascadeType.REFRESH }) CascadeType.REFRESH })
private List<Contact> contacts; private List<Contact> contacts;
// bi-directional many-to-one association to Contact
@OneToMany(mappedBy = "person", cascade = { CascadeType.MERGE, CascadeType.PERSIST,
CascadeType.REFRESH })
private List<PersonNote> notes;
// bi-directional many-to-many association to Persongroup // bi-directional many-to-many association to Persongroup
@ManyToMany(targetEntity = GroupDef.class, fetch = FetchType.EAGER, cascade = { CascadeType.MERGE, @ManyToMany(targetEntity = GroupDef.class, fetch = FetchType.EAGER, cascade = { CascadeType.MERGE,
CascadeType.REFRESH }) CascadeType.REFRESH })
@ -377,6 +382,13 @@ public class Person extends BaseEntity implements Serializable {
this.startpass.setStartpassNr(startpass); this.startpass.setStartpassNr(startpass);
} }
public List<PersonNote> getNotes() {
if (notes == null) {
notes = new ArrayList<>();
}
return notes;
}
@Override @Override
public int hashCode() { public int hashCode() {
final int prime = 31; final int prime = 31;

@ -0,0 +1,122 @@
package de.kreth.vaadin.clubhelper.vaadinclubhelper.data;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
@Entity
@Table(name = "notes")
@NamedQuery(name = PersonNote.QUERY_FINDALL, query = "SELECT p FROM Person p WHERE p.deleted is null")
public class PersonNote {
public static final String QUERY_FINDALL = "PersonNote.findAll";
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@ManyToOne
private Person person;
private String notekey;
private String notetext;
public PersonNote() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
public String getNotekey() {
return notekey;
}
public void setNotekey(String notekey) {
this.notekey = notekey;
}
public String getNotetext() {
return notetext;
}
public void setNotetext(String notetext) {
this.notetext = notetext;
}
@Override
public String toString() {
return "PersonNote [id=" + id + ", person=" + person + ", notekey=" + notekey + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
result = prime * result + ((notekey == null) ? 0 : notekey.hashCode());
result = prime * result + ((notetext == null) ? 0 : notetext.hashCode());
result = prime * result + ((person == null) ? 0 : person.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
PersonNote other = (PersonNote) obj;
if (id != other.id) {
return false;
}
if (notekey == null) {
if (other.notekey != null) {
return false;
}
}
else if (!notekey.equals(other.notekey)) {
return false;
}
if (notetext == null) {
if (other.notetext != null) {
return false;
}
}
else if (!notetext.equals(other.notetext)) {
return false;
}
if (person == null) {
if (other.person != null) {
return false;
}
}
else if (!person.equals(other.person)) {
return false;
}
return true;
}
}

@ -0,0 +1,64 @@
package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components;
import java.util.List;
import com.vaadin.data.HasValue.ValueChangeEvent;
import com.vaadin.shared.ui.ValueChangeMode;
import com.vaadin.ui.TextArea;
import com.vaadin.ui.VerticalLayout;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.PersonNote;
public class NotesComponent extends VerticalLayout {
private final TextArea notesComponent;
private PersonNote note;
private boolean hasChanges;
public NotesComponent() {
notesComponent = new TextArea();
notesComponent.setMaxLength(2000);
notesComponent.setCaption("Notizen");
notesComponent.setRows(25);
notesComponent.addValueChangeListener(this::textChange);
notesComponent.setValueChangeMode(ValueChangeMode.LAZY);
notesComponent.setValueChangeTimeout(1500);
// addComponent(new Label("<H1>Notizen</H1>", ContentMode.HTML));
addComponent(notesComponent);
hasChanges = false;
}
private void textChange(ValueChangeEvent<String> ev) {
if (note != null) {
if (ev.isUserOriginated()) {
hasChanges = true;
}
note.setNotetext(ev.getValue());
}
}
public void setPerson(Person person) {
notesComponent.clear();
hasChanges = false;
if (person != null) {
List<PersonNote> notes = person.getNotes();
if (notes.isEmpty() == false) {
note = notes.get(0);
notesComponent.setValue(note.getNotetext());
}
else {
note = new PersonNote();
notes.add(note);
note.setPerson(person);
}
}
}
public boolean hasChanges() {
return hasChanges;
}
}

@ -55,6 +55,8 @@ public class PersonEditDetails extends HorizontalLayout {
private AdressComponent adressLayout; private AdressComponent adressLayout;
private NotesComponent notes;
public PersonEditDetails(List<GroupDef> groups, PersonBusiness dao) { public PersonEditDetails(List<GroupDef> groups, PersonBusiness dao) {
this(groups, dao, true); this(groups, dao, true);
} }
@ -170,11 +172,15 @@ public class PersonEditDetails extends HorizontalLayout {
}); });
adressLayout.addSuccessConsumer(newAdress -> binder.getBean().addAdress(newAdress)); adressLayout.addSuccessConsumer(newAdress -> binder.getBean().addAdress(newAdress));
notes = new NotesComponent();
TabSheet sheet = new TabSheet(); TabSheet sheet = new TabSheet();
sheet.addTab(groupLayout, "Gruppen"); sheet.addTab(groupLayout, "Gruppen");
sheet.addTab(contactLayout, "Kontakte"); sheet.addTab(contactLayout, "Kontakte");
sheet.addTab(relationshipLayout, "Angehörige"); sheet.addTab(relationshipLayout, "Angehörige");
sheet.addTab(adressLayout, "Adresse"); sheet.addTab(adressLayout, "Adresse");
sheet.addTab(notes, "Notizen");
addComponents(layout, sheet); addComponents(layout, sheet);
setExpandRatio(layout, 1f); setExpandRatio(layout, 1f);
setExpandRatio(sheet, 2f); setExpandRatio(sheet, 2f);
@ -256,6 +262,7 @@ public class PersonEditDetails extends HorizontalLayout {
contactLayout.setPerson(person); contactLayout.setPerson(person);
relationshipLayout.setPerson(person); relationshipLayout.setPerson(person);
adressLayout.setPerson(person); adressLayout.setPerson(person);
notes.setPerson(person);
binder.setBean(person); binder.setBean(person);
} }

Loading…
Cancel
Save