package app.controler.note;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.ytreza.data.table.exception.ItemException;
import org.ytreza.data.table.exception.UnableToDeleteException;
import org.ytreza.data.table.exception.UnableToSaveException;
import app.controler.tag.Tag;
import app.controler.tag.TagManager;
import app.database.TableFactory;
import app.database.model.note.ModelNote;
public class NoteImp implements Note{
private String subject;
private String text;
private TableFactory factory;
private Integer id;
private ModelNote modelNote;
private boolean isUpdated;
private List<Tag> tagsList;
public NoteImp(TableFactory factory) {
this(factory, -1);
}
public NoteImp(TableFactory factory, Integer noteId) {
this.factory = factory;
this.id = noteId;
isUpdated = false;
}
@Override
public String getSubject() {
readModelNoteIfNecessary();
return subject;
}
@Override
public String getText() {
readModelNoteIfNecessary();
return text;
}
@Override
public void setSubject(String subject) {
this.subject = subject;
}
@Override
public void setText(String text) {
this.text = text;
}
private void readModelNoteIfNecessary() {
if (modelNote == null) {
modelNote = factory.getTableNote().getOrCreateItem(id);
if (subject == null) { subject = modelNote.getSubject();}
if (text == null) { text = modelNote.getText();}
}
}
@Override
public void save() {
readModelNoteIfNecessary();
saveNote();
saveTag();
}
private void saveNote() {
modelNote.setSubject(getSubject());
modelNote.setText(getText());
if (modelNote.isUpdated()){
try {
modelNote.save();
id = modelNote.getId();
isUpdated = true;
} catch (ItemException e) {
// AUTO_TODO Auto-generated catch block
e.printStackTrace();
} catch (UnableToSaveException e) {
// AUTO_TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private void saveTag() {
// AUTO_TODO Auto-generated method stub
}
@Override
public void delete() {
try {
modelNote.delete();
id = -1;
} catch (ItemException e) {
// AUTO_TODO Auto-generated catch block
e.printStackTrace();
} catch (UnableToDeleteException e) {
// AUTO_TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public Note copy() {
// TODO Faire la copie d'une note
return null;
}
@Override
public boolean isNew() {
return modelNote.isNew();
}
@Override
public void setTagList(String text) {
resetTagsList();
fillTagsListWithString(text);
}
private void fillTagsListWithString(String text) {
text = text.replace('\n',';');
List<String> list = Arrays.asList(text.split(";"));
TagManager tagManager = new TagManager(factory);
for (String label : list) {
add(tagManager.createTag(label));
}
}
private void add(Tag tag) {
tagsList.add(tag);
}
private void resetTagsList() {
tagsList = new ArrayList<Tag>();
}
@Override
public boolean isUpdated() {
return isUpdated;
}
@Override
public String toItemList() {
return getSubject();
}
@Override
public String toString() {
return id + " " + getSubject();
}
}