package org.lttpp.eemory.client.impl;
import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.commons.lang3.StringUtils;
import org.lttpp.eemory.Messages;
import org.lttpp.eemory.client.NoteOps;
import org.lttpp.eemory.client.StoreClientFactory;
import org.lttpp.eemory.client.metadata.EDAMLimits;
import org.lttpp.eemory.client.model.ENNote;
import org.lttpp.eemory.enml.ENML;
import org.lttpp.eemory.exception.EDAMDataModel;
import org.lttpp.eemory.exception.NoDataFoundException;
import org.lttpp.eemory.util.ListUtil;
import org.w3c.dom.DOMException;
import org.xml.sax.SAXException;
import com.evernote.clients.NoteStoreClient;
import com.evernote.edam.error.EDAMNotFoundException;
import com.evernote.edam.error.EDAMSystemException;
import com.evernote.edam.error.EDAMUserException;
import com.evernote.edam.type.Note;
import com.evernote.thrift.TException;
public class NoteOpsTextImpl extends NoteOps {
public NoteOpsTextImpl(final StoreClientFactory factory) {
super(factory);
}
@Override
public void updateOrCreate(final ENNote args) throws EDAMUserException, EDAMSystemException, EDAMNotFoundException, TException, ParserConfigurationException, SAXException, IOException, DOMException, NoDataFoundException {
if (ListUtil.isNullOrEmptyList(args.getContent())) {
throw new NoDataFoundException(Messages.Plugin_Error_NoText);
}
if (shouldUpdate(args)) {
update(args);
} else {
create(args);
}
}
private void create(final ENNote args) throws EDAMUserException, EDAMSystemException, EDAMNotFoundException, TException, ParserConfigurationException, SAXException, IOException {
Note note = new Note();
note.setTitle(StringUtils.abbreviate(args.getName(), EDAMLimits.EDAM_NOTE_TITLE_LEN_MAX));
if (StringUtils.isNotBlank(args.getNotebook().getGuid())) {
note.setNotebookGuid(args.getNotebook().getGuid());
}
ENML enml = new ENML();
enml.setTabWidth(args.getTabWidth());
enml.addComment(args.getComments());
enml.addContent(args.getContent());
note.setContent(enml.get());
for (String tagName : args.getTags()) {
tagName = tagName.trim();
if (StringUtils.isNotBlank(tagName)) {
note.addToTagNames(tagName);
}
}
getNoteStoreClient(args).createNote(note);
}
private void update(final ENNote args) throws EDAMUserException, EDAMSystemException, EDAMNotFoundException, TException, DOMException, ParserConfigurationException, SAXException, IOException {
NoteStoreClient client = getNoteStoreClient(args);
Note note = client.getNote(args.getGuid(), true, false, false, false);
if (!note.isActive()) {
EDAMNotFoundException e = new EDAMNotFoundException();
e.setIdentifier(EDAMDataModel.Note_noteGuid.toString());
e.setKey(args.getGuid());
throw e;
}
note.unsetResources();
// update content
ENML enml = new ENML(note.getContent());
enml.setTabWidth(args.getTabWidth());
enml.addComment(args.getComments());
enml.addContent(args.getContent());
note.setContent(enml.get());
// update tags
for (String tagName : args.getTags()) {
tagName = tagName.trim();
if (StringUtils.isNotBlank(tagName)) {
note.addToTagNames(tagName);
}
}
note.setUpdated(System.currentTimeMillis());
client.updateNote(note);
}
private boolean shouldUpdate(final ENNote args) {
return StringUtils.isNotBlank(args.getGuid());
}
}