//# 0 errors, 295 messages
//#
/*
    //#BookmarkEdit.java:1:1: class: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit
 * Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  The ASF licenses this file to You
 * under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.  For additional information regarding
 * copyright in this work, please see the NOTICE file in the top level
 * directory of this distribution.
 */

package org.apache.roller.weblogger.ui.struts2.editor;

import java.net.MalformedURLException;
import java.net.URL;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.roller.weblogger.WebloggerException;
import org.apache.roller.weblogger.business.BookmarkManager;
import org.apache.roller.weblogger.business.WebloggerFactory;
import org.apache.roller.weblogger.pojos.WeblogBookmark;
import org.apache.roller.weblogger.pojos.WeblogPermission;
import org.apache.roller.weblogger.ui.struts2.util.UIAction;
import org.apache.roller.weblogger.util.cache.CacheManager;
import org.apache.struts2.interceptor.validation.SkipValidation;


/**
 * Add a new bookmark to a folder.
 */
public class BookmarkEdit extends UIAction {
    
    private static Log log = LogFactory.getLog(BookmarkEdit.class);
    //#BookmarkEdit.java:41: method: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit.org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit__static_init
    //#BookmarkEdit.java:41: Warning: method not available
    //#    -- call on Log org.apache.commons.logging.LogFactory:getLog(Class)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit
    //#    method: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit__static_init
    //#    unanalyzed callee: Log org.apache.commons.logging.LogFactory:getLog(Class)
    //#output(org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit__static_init): __Descendant_Table[org/apache/roller/weblogger/ui/struts2/editor/BookmarkEdit]
    //#output(org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit__static_init): __Dispatch_Table.execute()Ljava/lang/String;
    //#output(org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit__static_init): __Dispatch_Table.getBean()Lorg/apache/roller/weblogger/ui/struts2/editor/BookmarkBean;
    //#output(org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit__static_init): __Dispatch_Table.getBookmark()Lorg/apache/roller/weblogger/pojos/WeblogBookmark;
    //#output(org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit__static_init): __Dispatch_Table.myPrepare()V
    //#output(org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit__static_init): __Dispatch_Table.myValidate()V
    //#output(org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit__static_init): __Dispatch_Table.requiredWeblogPermissions()S
    //#output(org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit__static_init): __Dispatch_Table.save()Ljava/lang/String;
    //#output(org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit__static_init): __Dispatch_Table.setBean(Lorg/apache/roller/weblogger/ui/struts2/editor/BookmarkBean;)V
    //#output(org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit__static_init): __Dispatch_Table.setBookmark(Lorg/apache/roller/weblogger/pojos/WeblogBookmark;)V
    //#output(org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit__static_init): __Dispatch_Table.validURL(Ljava/lang/String;)Z
    //#output(org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit__static_init): log
    //#post(org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit__static_init): __Descendant_Table[org/apache/roller/weblogger/ui/struts2/editor/BookmarkEdit] == &__Dispatch_Table
    //#post(org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit__static_init): __Dispatch_Table.execute()Ljava/lang/String; == &execute
    //#post(org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit__static_init): __Dispatch_Table.getBean()Lorg/apache/roller/weblogger/ui/struts2/editor/BookmarkBean; == &getBean
    //#post(org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit__static_init): __Dispatch_Table.getBookmark()Lorg/apache/roller/weblogger/pojos/WeblogBookmark; == &getBookmark
    //#post(org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit__static_init): __Dispatch_Table.myPrepare()V == &myPrepare
    //#post(org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit__static_init): __Dispatch_Table.myValidate()V == &myValidate
    //#post(org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit__static_init): __Dispatch_Table.requiredWeblogPermissions()S == &requiredWeblogPermissions
    //#post(org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit__static_init): __Dispatch_Table.save()Ljava/lang/String; == &save
    //#post(org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit__static_init): __Dispatch_Table.setBean(Lorg/apache/roller/weblogger/ui/struts2/editor/BookmarkBean;)V == &setBean
    //#post(org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit__static_init): __Dispatch_Table.setBookmark(Lorg/apache/roller/weblogger/pojos/WeblogBookmark;)V == &setBookmark
    //#post(org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit__static_init): __Dispatch_Table.validURL(Ljava/lang/String;)Z == &validURL
    //#post(org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit__static_init): init'ed(log)
    //#BookmarkEdit.java:41: end of method: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit.org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit__static_init
    
    // the bookmark we are editing
    private WeblogBookmark bookmark = null;
    
    // bean for managing form data
    private BookmarkBean bean = new BookmarkBean();
    
    
    public BookmarkEdit() {
    //#BookmarkEdit.java:50: method: void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit.org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()
    //#BookmarkEdit.java:50: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.struts2.util.UIAction()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit
    //#    method: void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.struts2.util.UIAction()
    //#input(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): this
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): new BookmarkBean(BookmarkEdit#1) num objects
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): this.bean.__Tag
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): this.bean.description
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): this.bean.feedUrl
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): this.bean.id
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): this.bean.image
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): this.bean.name
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): this.bean.priority
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): this.bean.url
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): this.bean.weight
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): new Integer(BookmarkBean#1) num objects
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): new Integer(BookmarkBean#2) num objects
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): this.actionName
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): this.bean
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): this.bookmark
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): this.desiredMenu
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): this.pageTitle
    //#new obj(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): new BookmarkBean(BookmarkEdit#1)
    //#new obj(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): new Integer(BookmarkBean#1)
    //#new obj(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): new Integer(BookmarkBean#2)
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): this.actionName == &"bookmarkEdit"
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): this.bean == &new BookmarkBean(BookmarkEdit#1)
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): this.bookmark == null
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): this.bean.description == null
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): this.bean.feedUrl == null
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): this.bean.id == null
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): this.bean.image == null
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): this.bean.name == null
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): this.bean.url == null
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): this.desiredMenu == &"editor"
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): this.pageTitle == &"bookmarkForm.edit.title"
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): new BookmarkBean(BookmarkEdit#1) num objects == 1
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): new Integer(BookmarkBean#1) num objects == 1
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): new Integer(BookmarkBean#2) num objects == 1
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): this.bean.__Tag == org/apache/roller/weblogger/ui/struts2/editor/BookmarkBean
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): this.bean.priority == &new Integer(BookmarkBean#2)
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): this.bean.weight == &new Integer(BookmarkBean#1)
    //#unanalyzed(void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()): Effects-of-calling:java.lang.Integer
        this.actionName = "bookmarkEdit";
        this.desiredMenu = "editor";
        this.pageTitle = "bookmarkForm.edit.title";
    }
    //#BookmarkEdit.java:54: end of method: void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit.org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit()
    
    
    public short requiredWeblogPermissions() {
        return WeblogPermission.ADMIN;
    //#BookmarkEdit.java:58: method: short org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit.requiredWeblogPermissions()
    //#input(short requiredWeblogPermissions()): org.apache.roller.weblogger.pojos.WeblogPermission.ADMIN
    //#output(short requiredWeblogPermissions()): return_value
    //#presumption(short requiredWeblogPermissions()): init'ed(org.apache.roller.weblogger.pojos.WeblogPermission.ADMIN)
    //#post(short requiredWeblogPermissions()): return_value == org.apache.roller.weblogger.pojos.WeblogPermission.ADMIN
    //#post(short requiredWeblogPermissions()): (soft) init'ed(return_value)
    //#BookmarkEdit.java:58: end of method: short org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit.requiredWeblogPermissions()
    }
    
    
    public void myPrepare() {
        try {
            BookmarkManager bmgr = WebloggerFactory.getWeblogger().getBookmarkManager();
    //#BookmarkEdit.java:64: method: void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit.myPrepare()
    //#BookmarkEdit.java:64: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit
    //#    method: void myPrepare()
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#BookmarkEdit.java:64: Warning: method not available
    //#    -- call on BookmarkManager org.apache.roller.weblogger.business.Weblogger:getBookmarkManager()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit
    //#    method: void myPrepare()
    //#    unanalyzed callee: BookmarkManager org.apache.roller.weblogger.business.Weblogger:getBookmarkManager()
    //#input(void myPrepare()): "Error looking up bookmark - "._tainted
    //#input(void myPrepare()): __Descendant_Table[org/apache/roller/weblogger/ui/struts2/editor/BookmarkEdit]
    //#input(void myPrepare()): __Descendant_Table[others]
    //#input(void myPrepare()): __Dispatch_Table.getBean()Lorg/apache/roller/weblogger/ui/struts2/editor/BookmarkBean;
    //#input(void myPrepare()): __Dispatch_Table.setBookmark(Lorg/apache/roller/weblogger/pojos/WeblogBookmark;)V
    //#input(void myPrepare()): log
    //#input(void myPrepare()): org/apache/roller/weblogger/ui/struts2/editor/BookmarkBean.__Descendant_Table[org/apache/roller/weblogger/ui/struts2/editor/BookmarkBean]
    //#input(void myPrepare()): org/apache/roller/weblogger/ui/struts2/editor/BookmarkBean.__Descendant_Table[others]
    //#input(void myPrepare()): org/apache/roller/weblogger/ui/struts2/editor/BookmarkBean.__Dispatch_Table.getId()Ljava/lang/String;
    //#input(void myPrepare()): this
    //#input(void myPrepare()): this.__Tag
    //#input(void myPrepare()): this.bean
    //#input(void myPrepare()): this.bean.__Tag
    //#input(void myPrepare()): this.bean.id
    //#input(void myPrepare()): this.bean.id._tainted
    //#output(void myPrepare()): this.bookmark
    //#pre[4] (void myPrepare()): this.__Tag == org/apache/roller/weblogger/ui/struts2/editor/BookmarkEdit
    //#pre[5] (void myPrepare()): this.bean != null
    //#pre[6] (void myPrepare()): this.bean.__Tag == org/apache/roller/weblogger/ui/struts2/editor/BookmarkBean
    //#pre[7] (void myPrepare()): init'ed(this.bean.id)
    //#pre[1] (void myPrepare()): (soft) log != null
    //#presumption(void myPrepare()): org.apache.roller.weblogger.business.Weblogger:getBookmarkManager(...)@64 != null
    //#presumption(void myPrepare()): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@64 != null
    //#post(void myPrepare()): possibly_updated(this.bookmark)
    //#test_vector(void myPrepare()): org.apache.commons.lang.StringUtils:isEmpty(...)@65: {1}, {0}
            if(!StringUtils.isEmpty(getBean().getId())) {
    //#BookmarkEdit.java:65: Warning: method not available
    //#    -- call on bool org.apache.commons.lang.StringUtils:isEmpty(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit
    //#    method: void myPrepare()
    //#    unanalyzed callee: bool org.apache.commons.lang.StringUtils:isEmpty(String)
                setBookmark(bmgr.getBookmark(getBean().getId()));
    //#BookmarkEdit.java:66: Warning: method not available
    //#    -- call on WeblogBookmark org.apache.roller.weblogger.business.BookmarkManager:getBookmark(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit
    //#    method: void myPrepare()
    //#    unanalyzed callee: WeblogBookmark org.apache.roller.weblogger.business.BookmarkManager:getBookmark(String)
            }
        } catch (WebloggerException ex) {
            log.error("Error looking up bookmark - "+getBean().getId(), ex);
    //#BookmarkEdit.java:69: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit
    //#    method: void myPrepare()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object, Throwable)
        }
    }
    //#BookmarkEdit.java:71: end of method: void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit.myPrepare()
    
    
    @SkipValidation
    public String execute() {
        
        if(getBookmark() == null) {
    //#BookmarkEdit.java:77: method: String org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit.execute()
    //#input(String execute()): __Descendant_Table[org/apache/roller/weblogger/ui/struts2/editor/BookmarkEdit]
    //#input(String execute()): __Descendant_Table[others]
    //#input(String execute()): __Dispatch_Table.getBean()Lorg/apache/roller/weblogger/ui/struts2/editor/BookmarkBean;
    //#input(String execute()): __Dispatch_Table.getBookmark()Lorg/apache/roller/weblogger/pojos/WeblogBookmark;
    //#input(String execute()): org/apache/roller/weblogger/ui/struts2/editor/BookmarkBean.__Descendant_Table[org/apache/roller/weblogger/ui/struts2/editor/BookmarkBean]
    //#input(String execute()): org/apache/roller/weblogger/ui/struts2/editor/BookmarkBean.__Descendant_Table[others]
    //#input(String execute()): org/apache/roller/weblogger/ui/struts2/editor/BookmarkBean.__Dispatch_Table.copyFrom(Lorg/apache/roller/weblogger/pojos/WeblogBookmark;)V
    //#input(String execute()): this
    //#input(String execute()): this.__Tag
    //#input(String execute()): this.bean
    //#input(String execute()): this.bean.__Tag
    //#input(String execute()): this.bookmark
    //#output(String execute()): return_value
    //#output(String execute()): this.bean.description
    //#output(String execute()): this.bean.feedUrl
    //#output(String execute()): this.bean.id
    //#output(String execute()): this.bean.image
    //#output(String execute()): this.bean.name
    //#output(String execute()): this.bean.priority
    //#output(String execute()): this.bean.url
    //#output(String execute()): this.bean.weight
    //#pre[10] (String execute()): this.__Tag == org/apache/roller/weblogger/ui/struts2/editor/BookmarkEdit
    //#pre[13] (String execute()): init'ed(this.bookmark)
    //#pre[11] (String execute()): (soft) this.bean != null
    //#pre[12] (String execute()): (soft) this.bean.__Tag == org/apache/roller/weblogger/ui/struts2/editor/BookmarkBean
    //#post(String execute()): return_value in Addr_Set{&"input",&"error"}
    //#post(String execute()): possibly_updated(this.bean.description)
    //#post(String execute()): possibly_updated(this.bean.feedUrl)
    //#post(String execute()): possibly_updated(this.bean.id)
    //#post(String execute()): possibly_updated(this.bean.image)
    //#post(String execute()): possibly_updated(this.bean.name)
    //#post(String execute()): possibly_updated(this.bean.priority)
    //#post(String execute()): possibly_updated(this.bean.url)
    //#post(String execute()): possibly_updated(this.bean.weight)
    //#unanalyzed(String execute()): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogBookmark:getId
    //#unanalyzed(String execute()): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogBookmark:getName
    //#unanalyzed(String execute()): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogBookmark:getDescription
    //#unanalyzed(String execute()): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogBookmark:getUrl
    //#unanalyzed(String execute()): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogBookmark:getWeight
    //#unanalyzed(String execute()): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogBookmark:getPriority
    //#unanalyzed(String execute()): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogBookmark:getImage
    //#unanalyzed(String execute()): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogBookmark:getFeedUrl
    //#test_vector(String execute()): this.bookmark: Inverse{null}, Addr_Set{null}
            // TODO: i18n
            addError("Cannot edit null bookmark");
    //#BookmarkEdit.java:79: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit:addError(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit
    //#    method: String execute()
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit:addError(String)
            return ERROR;
        }
        
        // make sure bean is properly loaded with pojo data
        getBean().copyFrom(getBookmark());
        
        return INPUT;
    //#BookmarkEdit.java:86: end of method: String org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit.execute()
    }

    
    public String save() {
        
        if(getBookmark() == null) {
    //#BookmarkEdit.java:92: method: String org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit.save()
    //#input(String save()): __Descendant_Table[org/apache/roller/weblogger/ui/struts2/editor/BookmarkEdit]
    //#input(String save()): __Descendant_Table[others]
    //#input(String save()): __Dispatch_Table.getBean()Lorg/apache/roller/weblogger/ui/struts2/editor/BookmarkBean;
    //#input(String save()): __Dispatch_Table.getBookmark()Lorg/apache/roller/weblogger/pojos/WeblogBookmark;
    //#input(String save()): __Dispatch_Table.myValidate()V
    //#input(String save()): __Dispatch_Table.validURL(Ljava/lang/String;)Z
    //#input(String save()): log
    //#input(String save()): org/apache/roller/weblogger/ui/struts2/editor/BookmarkBean.__Descendant_Table[org/apache/roller/weblogger/ui/struts2/editor/BookmarkBean]
    //#input(String save()): org/apache/roller/weblogger/ui/struts2/editor/BookmarkBean.__Descendant_Table[others]
    //#input(String save()): org/apache/roller/weblogger/ui/struts2/editor/BookmarkBean.__Dispatch_Table.copyTo(Lorg/apache/roller/weblogger/pojos/WeblogBookmark;)V
    //#input(String save()): org/apache/roller/weblogger/ui/struts2/editor/BookmarkBean.__Dispatch_Table.getFeedUrl()Ljava/lang/String;
    //#input(String save()): org/apache/roller/weblogger/ui/struts2/editor/BookmarkBean.__Dispatch_Table.getImage()Ljava/lang/String;
    //#input(String save()): org/apache/roller/weblogger/ui/struts2/editor/BookmarkBean.__Dispatch_Table.getUrl()Ljava/lang/String;
    //#input(String save()): this
    //#input(String save()): this.__Tag
    //#input(String save()): this.bean
    //#input(String save()): this.bean.__Tag
    //#input(String save()): this.bean.description
    //#input(String save()): this.bean.feedUrl
    //#input(String save()): this.bean.image
    //#input(String save()): this.bean.name
    //#input(String save()): this.bean.priority
    //#input(String save()): this.bean.url
    //#input(String save()): this.bean.weight
    //#input(String save()): this.bookmark
    //#output(String save()): return_value
    //#pre[3] (String save()): this.__Tag == org/apache/roller/weblogger/ui/struts2/editor/BookmarkEdit
    //#pre[13] (String save()): init'ed(this.bookmark)
    //#pre[1] (String save()): (soft) log != null
    //#pre[4] (String save()): (soft) this.bean != null
    //#pre[5] (String save()): (soft) this.bean.__Tag == org/apache/roller/weblogger/ui/struts2/editor/BookmarkBean
    //#pre[6] (String save()): (soft) init'ed(this.bean.description)
    //#pre[7] (String save()): (soft) init'ed(this.bean.feedUrl)
    //#pre[8] (String save()): (soft) init'ed(this.bean.image)
    //#pre[9] (String save()): (soft) init'ed(this.bean.name)
    //#pre[10] (String save()): (soft) init'ed(this.bean.priority)
    //#pre[11] (String save()): (soft) init'ed(this.bean.url)
    //#pre[12] (String save()): (soft) init'ed(this.bean.weight)
    //#presumption(String save()): org.apache.roller.weblogger.business.Weblogger:getBookmarkManager(...)@105 != null
    //#presumption(String save()): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@105 != null
    //#presumption(String save()): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@107 != null
    //#post(String save()): return_value in Addr_Set{&"input",&"error"}
    //#unanalyzed(String save()): Effects-of-calling:java.net.URL
    //#unanalyzed(String save()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(String save()): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogBookmark:setName
    //#unanalyzed(String save()): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogBookmark:setDescription
    //#unanalyzed(String save()): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogBookmark:setUrl
    //#unanalyzed(String save()): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogBookmark:setWeight
    //#unanalyzed(String save()): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogBookmark:setPriority
    //#unanalyzed(String save()): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogBookmark:setImage
    //#unanalyzed(String save()): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogBookmark:setFeedUrl
    //#unanalyzed(String save()): Effects-of-calling:org.apache.commons.lang.StringUtils:isNotEmpty
    //#unanalyzed(String save()): Effects-of-calling:org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit:addError
    //#test_vector(String save()): this.bookmark: Inverse{null}, Addr_Set{null}
    //#test_vector(String save()): org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit:hasActionErrors(...)@101: {1}, {0}
            // TODO: i18n
            addError("Cannot edit null bookmark");
    //#BookmarkEdit.java:94: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit:addError(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit
    //#    method: String save()
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit:addError(String)
            return ERROR;
        }
        
        // validation
        myValidate();
        
        if(!hasActionErrors()) try {
    //#BookmarkEdit.java:101: Warning: method not available
    //#    -- call on bool org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit:hasActionErrors()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit
    //#    method: String save()
    //#    unanalyzed callee: bool org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit:hasActionErrors()
            
            getBean().copyTo(getBookmark());
            
            BookmarkManager bmgr = WebloggerFactory.getWeblogger().getBookmarkManager();
    //#BookmarkEdit.java:105: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit
    //#    method: String save()
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#BookmarkEdit.java:105: Warning: method not available
    //#    -- call on BookmarkManager org.apache.roller.weblogger.business.Weblogger:getBookmarkManager()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit
    //#    method: String save()
    //#    unanalyzed callee: BookmarkManager org.apache.roller.weblogger.business.Weblogger:getBookmarkManager()
            bmgr.saveBookmark(getBookmark());
    //#BookmarkEdit.java:106: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.business.BookmarkManager:saveBookmark(WeblogBookmark)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit
    //#    method: String save()
    //#    unanalyzed callee: void org.apache.roller.weblogger.business.BookmarkManager:saveBookmark(WeblogBookmark)
            WebloggerFactory.getWeblogger().flush();
    //#BookmarkEdit.java:107: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit
    //#    method: String save()
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#BookmarkEdit.java:107: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.business.Weblogger:flush()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit
    //#    method: String save()
    //#    unanalyzed callee: void org.apache.roller.weblogger.business.Weblogger:flush()
            
            CacheManager.invalidate(getBookmark());
    //#BookmarkEdit.java:109: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.util.cache.CacheManager:invalidate(WeblogBookmark)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit
    //#    method: String save()
    //#    unanalyzed callee: void org.apache.roller.weblogger.util.cache.CacheManager:invalidate(WeblogBookmark)
            
            // TODO: i18n
            addMessage("bookmark updated");
    //#BookmarkEdit.java:112: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit:addMessage(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit
    //#    method: String save()
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit:addMessage(String)
            
        } catch(Exception ex) {
            log.error("Error saving bookmark", ex);
    //#BookmarkEdit.java:115: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit
    //#    method: String save()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object, Throwable)
            // TODO: i18n
            addError("Error saving bookmark");
    //#BookmarkEdit.java:117: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit:addError(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit
    //#    method: String save()
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit:addError(String)
        }
        
        return INPUT;
    //#BookmarkEdit.java:120: end of method: String org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit.save()
    }

    
    public void myValidate() {
        if (StringUtils.isNotEmpty(getBean().getUrl()) && !validURL(getBean().getUrl())) {
    //#BookmarkEdit.java:125: method: void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit.myValidate()
    //#BookmarkEdit.java:125: Warning: method not available
    //#    -- call on bool org.apache.commons.lang.StringUtils:isNotEmpty(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit
    //#    method: void myValidate()
    //#    unanalyzed callee: bool org.apache.commons.lang.StringUtils:isNotEmpty(String)
    //#input(void myValidate()): __Descendant_Table[org/apache/roller/weblogger/ui/struts2/editor/BookmarkEdit]
    //#input(void myValidate()): __Descendant_Table[others]
    //#input(void myValidate()): __Dispatch_Table.getBean()Lorg/apache/roller/weblogger/ui/struts2/editor/BookmarkBean;
    //#input(void myValidate()): __Dispatch_Table.validURL(Ljava/lang/String;)Z
    //#input(void myValidate()): org/apache/roller/weblogger/ui/struts2/editor/BookmarkBean.__Descendant_Table[org/apache/roller/weblogger/ui/struts2/editor/BookmarkBean]
    //#input(void myValidate()): org/apache/roller/weblogger/ui/struts2/editor/BookmarkBean.__Descendant_Table[others]
    //#input(void myValidate()): org/apache/roller/weblogger/ui/struts2/editor/BookmarkBean.__Dispatch_Table.getFeedUrl()Ljava/lang/String;
    //#input(void myValidate()): org/apache/roller/weblogger/ui/struts2/editor/BookmarkBean.__Dispatch_Table.getImage()Ljava/lang/String;
    //#input(void myValidate()): org/apache/roller/weblogger/ui/struts2/editor/BookmarkBean.__Dispatch_Table.getUrl()Ljava/lang/String;
    //#input(void myValidate()): this
    //#input(void myValidate()): this.__Tag
    //#input(void myValidate()): this.bean
    //#input(void myValidate()): this.bean.__Tag
    //#input(void myValidate()): this.bean.feedUrl
    //#input(void myValidate()): this.bean.image
    //#input(void myValidate()): this.bean.url
    //#pre[2] (void myValidate()): this.__Tag == org/apache/roller/weblogger/ui/struts2/editor/BookmarkEdit
    //#pre[3] (void myValidate()): this.bean != null
    //#pre[4] (void myValidate()): this.bean.__Tag == org/apache/roller/weblogger/ui/struts2/editor/BookmarkBean
    //#pre[5] (void myValidate()): init'ed(this.bean.feedUrl)
    //#pre[6] (void myValidate()): init'ed(this.bean.image)
    //#pre[7] (void myValidate()): init'ed(this.bean.url)
    //#unanalyzed(void myValidate()): Effects-of-calling:java.net.URL
    //#unanalyzed(void myValidate()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#test_vector(void myValidate()): org.apache.commons.lang.StringUtils:isNotEmpty(...)@125: {0}, {1}
    //#test_vector(void myValidate()): org.apache.commons.lang.StringUtils:isNotEmpty(...)@128: {0}, {1}
    //#test_vector(void myValidate()): org.apache.commons.lang.StringUtils:isNotEmpty(...)@131: {0}, {1}
            addError("bookmarkgetBean().error.invalidURL", getBean().getUrl());
    //#BookmarkEdit.java:126: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit:addError(String, String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit
    //#    method: void myValidate()
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit:addError(String, String)
        }
        if (StringUtils.isNotEmpty(getBean().getFeedUrl()) && !validURL(getBean().getFeedUrl())) {
    //#BookmarkEdit.java:128: Warning: method not available
    //#    -- call on bool org.apache.commons.lang.StringUtils:isNotEmpty(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit
    //#    method: void myValidate()
    //#    unanalyzed callee: bool org.apache.commons.lang.StringUtils:isNotEmpty(String)
            addError("bookmarkgetBean().error.invalidURL", getBean().getFeedUrl());
    //#BookmarkEdit.java:129: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit:addError(String, String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit
    //#    method: void myValidate()
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit:addError(String, String)
        }
        if (StringUtils.isNotEmpty(getBean().getImage()) && !validURL(getBean().getImage())) {
    //#BookmarkEdit.java:131: Warning: method not available
    //#    -- call on bool org.apache.commons.lang.StringUtils:isNotEmpty(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit
    //#    method: void myValidate()
    //#    unanalyzed callee: bool org.apache.commons.lang.StringUtils:isNotEmpty(String)
            addError("bookmarkgetBean().error.invalidURL", getBean().getImage());
    //#BookmarkEdit.java:132: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit:addError(String, String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit
    //#    method: void myValidate()
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit:addError(String, String)
        }
    }
    //#BookmarkEdit.java:134: end of method: void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit.myValidate()
    
    public boolean validURL(String url) {
        boolean valid = false;
    //#BookmarkEdit.java:137: method: bool org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit.validURL(String)
    //#input(bool validURL(String)): url
    //#output(bool validURL(String)): return_value
    //#post(bool validURL(String)): init'ed(return_value)
        try {
            URL test = new URL(url);
    //#BookmarkEdit.java:139: Warning: unused assignment
    //#    unused assignment into test
    //#    severity: LOW
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit
    //#    method: bool validURL(String)
            valid = true;
        } catch (MalformedURLException intentionallyIgnored) {}
        return valid;
    //#BookmarkEdit.java:142: end of method: bool org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit.validURL(String)
    }
    
    
    public WeblogBookmark getBookmark() {
        return bookmark;
    //#BookmarkEdit.java:147: method: WeblogBookmark org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit.getBookmark()
    //#input(WeblogBookmark getBookmark()): this
    //#input(WeblogBookmark getBookmark()): this.bookmark
    //#output(WeblogBookmark getBookmark()): return_value
    //#pre[2] (WeblogBookmark getBookmark()): init'ed(this.bookmark)
    //#post(WeblogBookmark getBookmark()): return_value == this.bookmark
    //#post(WeblogBookmark getBookmark()): init'ed(return_value)
    //#BookmarkEdit.java:147: end of method: WeblogBookmark org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit.getBookmark()
    }

    public void setBookmark(WeblogBookmark bookmark) {
        this.bookmark = bookmark;
    //#BookmarkEdit.java:151: method: void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit.setBookmark(WeblogBookmark)
    //#input(void setBookmark(WeblogBookmark)): bookmark
    //#input(void setBookmark(WeblogBookmark)): this
    //#output(void setBookmark(WeblogBookmark)): this.bookmark
    //#post(void setBookmark(WeblogBookmark)): this.bookmark == bookmark
    //#post(void setBookmark(WeblogBookmark)): init'ed(this.bookmark)
    }
    //#BookmarkEdit.java:152: end of method: void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit.setBookmark(WeblogBookmark)

    public BookmarkBean getBean() {
        return bean;
    //#BookmarkEdit.java:155: method: BookmarkBean org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit.getBean()
    //#input(BookmarkBean getBean()): this
    //#input(BookmarkBean getBean()): this.bean
    //#output(BookmarkBean getBean()): return_value
    //#pre[2] (BookmarkBean getBean()): init'ed(this.bean)
    //#post(BookmarkBean getBean()): return_value == this.bean
    //#post(BookmarkBean getBean()): init'ed(return_value)
    //#BookmarkEdit.java:155: end of method: BookmarkBean org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit.getBean()
    }

    public void setBean(BookmarkBean bean) {
        this.bean = bean;
    //#BookmarkEdit.java:159: method: void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit.setBean(BookmarkBean)
    //#input(void setBean(BookmarkBean)): bean
    //#input(void setBean(BookmarkBean)): this
    //#output(void setBean(BookmarkBean)): this.bean
    //#post(void setBean(BookmarkBean)): this.bean == bean
    //#post(void setBean(BookmarkBean)): init'ed(this.bean)
    }
    //#BookmarkEdit.java:160: end of method: void org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit.setBean(BookmarkBean)
    
}
    //#BookmarkEdit.java:: end of class: org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit
