001    /**
002     * Copyright 2005-2012 The Kuali Foundation
003     *
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.opensource.org/licenses/ecl2.php
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.rice.kew.impl.note;
017    
018    import java.sql.Timestamp;
019    import java.util.ArrayList;
020    import java.util.Collections;
021    import java.util.List;
022    
023    import org.apache.commons.lang.StringUtils;
024    import org.kuali.rice.core.api.exception.RiceIllegalArgumentException;
025    import org.kuali.rice.kew.api.note.Note;
026    import org.kuali.rice.kew.api.note.NoteService;
027    import org.kuali.rice.kew.notes.dao.NoteDAO;
028    
029    /**
030     * TODO 
031     * 
032     * @author Kuali Rice Team (rice.collab@kuali.org)
033     *
034     */
035    public class NoteServiceImpl implements NoteService {
036    
037            private NoteDAO noteDao;
038            
039            @Override
040            public List<Note> getNotes(String documentId) {
041                    if (StringUtils.isBlank(documentId)) {
042                            throw new RiceIllegalArgumentException("documentId was null or blank");
043                    }
044                    List<org.kuali.rice.kew.notes.Note> noteBos = getNoteDao().getNotesByDocumentId(documentId);
045                    if (noteBos == null) {
046                            return Collections.emptyList();
047                    }
048                    List<Note> notes = new ArrayList<Note>();
049                    for (org.kuali.rice.kew.notes.Note noteBo : noteBos) {
050                            notes.add(org.kuali.rice.kew.notes.Note.to(noteBo));
051                    }
052                    return Collections.unmodifiableList(notes);
053            }
054    
055            @Override
056            public Note getNote(String noteId) {
057                    if (StringUtils.isBlank(noteId)) {
058                            throw new RiceIllegalArgumentException("noteId was null or blank");
059                    }
060                    org.kuali.rice.kew.notes.Note noteBo = getNoteDao().getNoteByNoteId(noteId);
061                    return org.kuali.rice.kew.notes.Note.to(noteBo);
062            }
063    
064            @Override
065            public Note createNote(Note note) {
066                    if (note == null) {
067                            throw new RiceIllegalArgumentException("note was null");
068                    }
069                    if (note.getId() != null) {
070                            throw new RiceIllegalArgumentException("Attempted to create a note that already has an id assigned, id must be null upon creation");
071                    }
072                    if (note.getVersionNumber() != null) {
073                            throw new RiceIllegalArgumentException("Attempted to create a note that already has a version number assigned, version number must be null upon creation");
074                    }
075                    org.kuali.rice.kew.notes.Note noteBo = org.kuali.rice.kew.notes.Note.from(note);
076                    if (noteBo.getNoteCreateDate() == null) {
077                            noteBo.setNoteCreateDate(new Timestamp(System.currentTimeMillis()));
078                    }
079                    getNoteDao().saveNote(noteBo);
080                    return org.kuali.rice.kew.notes.Note.to(noteBo);
081            }
082    
083            @Override
084            public Note updateNote(Note note) {
085                    if (note == null) {
086                            throw new RiceIllegalArgumentException("note was null");
087                    }
088                    if (note.getId() == null) {
089                            throw new RiceIllegalArgumentException("Attempted to update a note without an id, id must be present when updating");
090                    }
091                    if (note.getVersionNumber() == null) {
092                            throw new RiceIllegalArgumentException("Attempted to update a note without a version number, version number must be present when updating");
093                    }
094                    if (note.getCreateDate() == null) {
095                            throw new RiceIllegalArgumentException("Attempted to update a note without a create date, note must have a create date");
096                    }
097                    Note existingNoteBo = getNote(note.getId());
098                    if (existingNoteBo == null) {
099                            throw new RiceIllegalArgumentException("Attempted to udpate a note with an id for a not that does not exist: " + note.getId());
100                    }
101                    org.kuali.rice.kew.notes.Note noteBo = org.kuali.rice.kew.notes.Note.from(note);
102                    getNoteDao().saveNote(noteBo);
103                    return org.kuali.rice.kew.notes.Note.to(noteBo);
104            }
105    
106            @Override
107            public Note deleteNote(String noteId) {
108                    if (StringUtils.isBlank(noteId)) {
109                            throw new RiceIllegalArgumentException("noteId was null or blank");
110                    }
111                    org.kuali.rice.kew.notes.Note noteBo = getNoteDao().getNoteByNoteId(noteId);
112                    if (noteBo == null) {
113                            throw new RiceIllegalArgumentException("A note does not exist for the given note id: " + noteId);
114                    }
115                    Note deletedNote = org.kuali.rice.kew.notes.Note.to(noteBo);
116                    getNoteDao().deleteNote(noteBo);
117                    return deletedNote;
118            }
119            
120            public void setNoteDao(NoteDAO noteDao) {
121                    this.noteDao = noteDao;
122            }
123            
124            public NoteDAO getNoteDao() {
125                    return noteDao;
126            }
127    
128    }