blob: 3bfa0e4e9f067de18f82465f74661cbd7e62fff2 [file]
import org.grails.bookmarks.*
class BookmarkController extends SecureController {
def scaffold = Bookmark
DeliciousService deliciousService
Map params = [:]
//Map flash = [:]
//Map session = [:]
def create = {
def b = new Bookmark()
b.properties = params
def suggestions = b.url ? getSuggestions(b.url, b) : []
return [bookmark:b, suggestions:suggestions]
}
def preview = {
def b = Bookmark.get(params.id)
render {
iframe(src:b.url,width:640,height:480,border:0, 'iframes not supported by browse')
}
}
def edit = {
def b = Bookmark.get(params.id)
if(b) {
return [bookmark:b, suggestions: getSuggestions(b.url,b) ]
}
else {
render "bookmark not found for id ${params.id}"
}
}
def delete = {
def b = Bookmark.get(params.id)
if(b) {
b.delete()
flash.message = "Bookmark ${b.id} deleted."
redirect(action:list)
}
else {
render "Bookmark not found"
}
}
def update = {
def b = Bookmark.get(params.id)
if(b) {
b.properties = params
addTags(b)
if(b.save()) {
render(template:'bookmark', model:[bookmark:b])
}
else {
render(view:'edit', model:[bookmark:b])
}
}
else {
render "Bookmark not found"
}
}
def save = {
def b = new Bookmark()
b.properties = params
b.user = User.get(session.user.id)
if(b.save()) {
if(params.tagTokens) {
addTags(b)
b.save()
}
redirect(action:list,id:b.id)
}
else {
render(view:'create',model:[bookmark:b])
}
}
private addTags(Bookmark b) {
def tags = params.tagTokens?.trim()
if(tags?.indexOf(' ')) {
tags = tags.split(' ').toList()
tags = tags.unique()
tags.each {
Tag t = Tag.findByName(it)
if(!t)t = new Tag(name:it).save()
b.addToTags(new TagReference(bookmark:b, tag:t, user:b.user))
}
}
else {
Tag t = Tag.findByName(tags)
if(!t)t = new Tag(name:tags).save()
b.addToTags( new TagReference(bookmark:b, tag:t, user:b.user) )
}
}
def list = {
if(!params.max)params.max=10
def fromDelicious
try {
fromDelicious = deliciousService?.findRecent(session.user)
}
catch(Exception e) {
println e.message
e.printStackTrace(System.out)
//log.error("Error communication with del.icio.us service: ${e.message}",e)
}
[bookmarkList: Bookmark.findAllByUser(User.get(session['user'].id), params ), deliciousList: fromDelicious ]
}
def search = {
def criteria = Bookmark.createCriteria()
def t = Tag.findByName(params.q)
def bookmarks = criteria.list {
or {
ilike('title',"%${params.q}%".toString())
ilike('notes',"%${params.q}%".toString())
if(t) {
tags {
eq('tag', t)
}
}
}
}
def fromDelicious
try {
fromDelicious = deliciousService?.findAllForTag(params.q,session.user)
}
catch(Exception e) {
println e.message
e.printStackTrace(System.out)
//log.error("Error communication with del.icio.us service: ${e.message}",e)
}
render(view:'list',model:[ bookmarkList:bookmarks.unique(),
deliciousResults:fromDelicious] )
}
def updateNotes = {
def b = Bookmark.get(params.id)
if(b) {
b.notes = params.notes
b.save()
}
render( params.notes )
}
def suggestTag = {
if(params.value?.trim()) {
if(!params.value?.startsWith("http://")) params.value = "http://${params.value}"
def bookmark = params.id ? Bookmark.get(params.id) : null
try {
def url = bookmark ? bookmark.url : new URI(params.value)
def tags = getSuggestions(url,bookmark)
render(template:'suggest',model:[tags:tags,bookmark:bookmark])
}
catch(Exception e) {
log.debug(e.message , e)
render ""
}
}
else {
render ""
}
}
private printParams(params, unusedParam) {
params.each {
println it
}
}
private getSuggestions(url,bookmark) {
def tagRefs = TagReference.findAll('from TagReference where bookmark.url = ?', [url])
def tags
if(bookmark) {
tags = tagRefs.findAll { bookmark.tags?.contains(it.tag) }.tag.unique()
}
else {
tags = tagRefs.tag.unique()
}
return tags
}
}