Author: gmazza
Date: Thu Sep  4 19:32:04 2014
New Revision: 1622537

URL: http://svn.apache.org/r1622537
Log:
ROL-2052 fix for custom stylesheets not getting updated correctly when user 
switches between shared and custom themes.

Modified:
    
roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/themes/ThemeManager.java
    
roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/themes/ThemeManagerImpl.java
    
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/ThemeEdit.java
    roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/ThemeEdit.jsp

Modified: 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/themes/ThemeManager.java
URL: 
http://svn.apache.org/viewvc/roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/themes/ThemeManager.java?rev=1622537&r1=1622536&r2=1622537&view=diff
==============================================================================
--- 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/themes/ThemeManager.java
 (original)
+++ 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/themes/ThemeManager.java
 Thu Sep  4 19:32:04 2014
@@ -76,11 +76,16 @@ public interface ThemeManager {
      *            The weblog (website) to import the theme into.
      * @param theme
      *            The theme that should be imported.
+     * @param skipStylesheet
+     *            Whether the stylesheet should be omitted from the import.  
Useful
+     *            when moving from a shared theme with a custom stylesheet to 
a custom
+     *            theme importing the same shared theme, as it allows the 
user's custom
+     *            stylesheet to remain.
      *
      * @throws WebloggerException
      *             If there is some kind of error in saving.
      */
-    void importTheme(Weblog website, SharedTheme theme)
+    void importTheme(Weblog website, SharedTheme theme, boolean skipStylesheet)
             throws WebloggerException;
 
     /**

Modified: 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/themes/ThemeManagerImpl.java
URL: 
http://svn.apache.org/viewvc/roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/themes/ThemeManagerImpl.java?rev=1622537&r1=1622536&r2=1622537&view=diff
==============================================================================
--- 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/themes/ThemeManagerImpl.java
 (original)
+++ 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/themes/ThemeManagerImpl.java
 Thu Sep  4 19:32:04 2014
@@ -129,7 +129,7 @@ public class ThemeManagerImpl implements
        public SharedTheme getTheme(String id) throws WebloggerException {
 
                // try to lookup theme from library
-               SharedTheme theme = (SharedTheme) this.themes.get(id);
+               SharedTheme theme = this.themes.get(id);
 
                // no theme? throw exception.
                if (theme == null) {
@@ -186,9 +186,9 @@ public class ThemeManagerImpl implements
 
        /**
         * @see 
org.apache.roller.weblogger.business.themes.ThemeManager#importTheme(Weblog,
-        *      SharedTheme)
+        *      SharedTheme, boolean)
         */
-       public void importTheme(Weblog weblog, SharedTheme theme)
+       public void importTheme(Weblog weblog, SharedTheme theme, boolean 
skipStylesheet)
                        throws WebloggerException {
 
                log.debug("Importing theme [" + theme.getName() + "] to weblog 
["
@@ -199,8 +199,7 @@ public class ThemeManagerImpl implements
 
                MediaFileDirectory root = 
fileMgr.getDefaultMediaFileDirectory(weblog);
         if (root == null) {
-            log.warn("Weblog " + weblog.getHandle()
-                    + " does not have a root MediaFile directory");
+            log.warn("Weblog " + weblog.getHandle() + " does not have a root 
MediaFile directory");
         }
 
                Set<ComponentType> importedActionTemplates = new 
HashSet<ComponentType>();
@@ -228,14 +227,8 @@ public class ThemeManagerImpl implements
                                newTmpl = true;
                        }
 
-                       // TODO: fix conflict situation
-                       // it's possible that someone has defined a theme 
template which
-                       // matches 2 existing templates, 1 by action, the other 
by name
-
-                       // update template attributes
-                       // NOTE: we don't want to copy the template data for an 
existing
-                       // stylesheet
-                       if (newTmpl || 
!themeTemplate.equals(stylesheetTemplate)) {
+                       // update template attributes except leave existing 
custom stylesheets as-is
+                       if (!themeTemplate.equals(stylesheetTemplate) || 
!skipStylesheet) {
                                template.setAction(themeTemplate.getAction());
                                template.setName(themeTemplate.getName());
                                
template.setDescription(themeTemplate.getDescription());
@@ -247,33 +240,32 @@ public class ThemeManagerImpl implements
 
                                // save it
                                wmgr.saveTemplate(template);
-                       }
 
-                       // create weblog template code objects and save them
-                       for (RenditionType type : RenditionType.values()) {
+                // create weblog template code objects and save them
+                for (RenditionType type : RenditionType.values()) {
 
-                               // See if we already have some code for this 
template already (eg previous theme)
-                               CustomTemplateRendition weblogTemplateCode = 
template.getTemplateRendition(type);
+                    // See if we already have some code for this template 
already (eg previous theme)
+                    CustomTemplateRendition weblogTemplateCode = 
template.getTemplateRendition(type);
 
-                               // Get the template for the new theme
-                               TemplateRendition templateCode = 
themeTemplate.getTemplateRendition(type);
-                               if (templateCode != null) {
-                                       
-                                       // Check for existing template
-                                       if (weblogTemplateCode == null) {
-                                               // Does not exist so create a 
new one
-                                               weblogTemplateCode = new 
CustomTemplateRendition(
-                                                               template, type);
-                                       }
-                                       weblogTemplateCode.setType(type);
-                                       
weblogTemplateCode.setTemplate(templateCode.getTemplate());
-                                       
weblogTemplateCode.setTemplateLanguage(templateCode
-                            .getTemplateLanguage());
-                                       
WebloggerFactory.getWeblogger().getWeblogManager()
-                                                       
.saveTemplateRendition(weblogTemplateCode);
-                               }
+                    // Get the template for the new theme
+                    TemplateRendition templateCode = 
themeTemplate.getTemplateRendition(type);
+                    if (templateCode != null) {
+
+                        // Check for existing template
+                        if (weblogTemplateCode == null) {
+                            // Does not exist so create a new one
+                            weblogTemplateCode = new 
CustomTemplateRendition(template, type);
+                        }
+                        weblogTemplateCode.setType(type);
+                        
weblogTemplateCode.setTemplate(templateCode.getTemplate());
+                        weblogTemplateCode.setTemplateLanguage(templateCode
+                                .getTemplateLanguage());
+                        WebloggerFactory.getWeblogger().getWeblogManager()
+                                .saveTemplateRendition(weblogTemplateCode);
+                    }
 
-                       }
+                }
+            }
                }
 
                // now, see if the weblog has left over non-custom action 
templates that
@@ -286,8 +278,7 @@ public class ThemeManagerImpl implements
                        if (!importedActionTemplates.contains(action)) {
                                WeblogTemplate toDelete = 
wmgr.getTemplateByAction(weblog, action);
                                if (toDelete != null) {
-                                       log.debug("Removing stale action 
template "
-                                                       + toDelete.getId());
+                                       log.debug("Removing stale action 
template " + toDelete.getId());
                                        wmgr.removeTemplate(toDelete);
                                }
                        }

Modified: 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/ThemeEdit.java
URL: 
http://svn.apache.org/viewvc/roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/ThemeEdit.java?rev=1622537&r1=1622536&r2=1622537&view=diff
==============================================================================
--- 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/ThemeEdit.java
 (original)
+++ 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/ThemeEdit.java
 Thu Sep  4 19:32:04 2014
@@ -62,8 +62,8 @@ public class ThemeEdit extends UIAction 
     // a potentially new selected theme
     private String selectedThemeId = null;
 
-    // Do we have a custom stylesheet already
-    private boolean customStylesheet = false;
+    // Are we using a shared theme with a custom stylesheet
+    private boolean sharedThemeCustomStylesheet = false;
 
     public ThemeEdit() {
         this.actionName = "themeEdit";
@@ -75,21 +75,8 @@ public class ThemeEdit extends UIAction 
         ThemeManager themeMgr = WebloggerFactory.getWeblogger()
                 .getThemeManager();
         themes = themeMgr.getEnabledThemesList();
-    }
-
-    public String execute() {
-
-        // set theme to current value
-        if (WeblogTheme.CUSTOM.equals(getActionWeblog().getEditorTheme())) {
-            setThemeId(null);
-            setSelectedThemeId(null);
-            setImportTheme(false);
-        } else {
-            setThemeId(getActionWeblog().getTheme().getId());
-            setSelectedThemeId(getThemeId());
-        }
 
-        // See if we have a custom style sheet from a custom theme.
+        // See if we're using a shared theme with a custom template
         try {
             if (!WeblogTheme.CUSTOM.equals(getActionWeblog().getEditorTheme())
                     && getActionWeblog().getTheme().getStylesheet() != null) {
@@ -102,13 +89,26 @@ public class ThemeEdit extends UIAction 
                                 getActionWeblog().getTheme().getStylesheet()
                                         .getLink());
                 if (override != null) {
-                    customStylesheet = true;
+                    sharedThemeCustomStylesheet = true;
                 }
             }
         } catch (WebloggerException ex) {
             log.error("Error looking up stylesheet on weblog - "
                     + getActionWeblog().getHandle(), ex);
         }
+    }
+
+    public String execute() {
+
+        // set theme to current value
+        if (WeblogTheme.CUSTOM.equals(getActionWeblog().getEditorTheme())) {
+            setThemeId(null);
+            setSelectedThemeId(null);
+            setImportTheme(false);
+        } else {
+            setThemeId(getActionWeblog().getTheme().getId());
+            setSelectedThemeId(getThemeId());
+        }
 
         return INPUT;
     }
@@ -123,41 +123,37 @@ public class ThemeEdit extends UIAction 
         // Are we dealing with a custom theme scenario?
         if (WeblogTheme.CUSTOM.equals(getThemeType())) {
 
-            // do theme import if necessary
-            SharedTheme t = null;
-
-            try {
-                ThemeManager themeMgr = WebloggerFactory.getWeblogger()
-                        .getThemeManager();
-                if (importTheme && !StringUtils.isEmpty(selectedThemeId)) {
-                    t = themeMgr.getTheme(selectedThemeId);
-                    themeMgr.importTheme(getActionWeblog(), t);
+            // do theme import if requested
+            if (importTheme) {
+                try {
+                    ThemeManager themeMgr = 
WebloggerFactory.getWeblogger().getThemeManager();
+                    if (!StringUtils.isEmpty(selectedThemeId)) {
+                        SharedTheme t = themeMgr.getTheme(selectedThemeId);
+                        // if moving from shared w/custom SS to custom import 
of same shared theme,
+                        // keep the custom stylesheet.
+                        boolean skipStylesheet = (sharedThemeCustomStylesheet 
&& selectedThemeId.equals(weblog.getEditorTheme()));
+                        themeMgr.importTheme(getActionWeblog(), t, 
skipStylesheet);
+                        addMessage("themeEditor.setCustomTheme.success", 
t.getName());
+                    }
+                } catch (Exception re) {
+                    log.error("Error customizing theme for weblog - "
+                            + getActionWeblog().getHandle(), re);
+                    addError("generic.error.check.logs");
+                    return execute();
                 }
-            } catch (Exception re) {
-                log.error("Error customizing theme for weblog - "
-                        + getActionWeblog().getHandle(), re);
-                addError("generic.error.check.logs");
-                return execute();
             }
 
             if (!hasActionErrors()) {
                 try {
-                    weblog.setEditorTheme(WeblogTheme.CUSTOM);
-                    log.debug("Saving custom theme for weblog "
-                            + weblog.getHandle());
-
                     // save updated weblog and flush
-                    WebloggerFactory.getWeblogger().getWeblogManager()
-                            .saveWeblog(weblog);
+                    weblog.setEditorTheme(WeblogTheme.CUSTOM);
+                    
WebloggerFactory.getWeblogger().getWeblogManager().saveWeblog(weblog);
                     WebloggerFactory.getWeblogger().flush();
 
                     // make sure to flush the page cache so ppl can see the 
change
                     CacheManager.invalidate(weblog);
 
                     addMessage("themeEditor.setTheme.success", 
WeblogTheme.CUSTOM);
-                    if (importTheme && t != null) {
-                        addMessage("themeEditor.setCustomTheme.success", 
t.getName());
-                    }
                     addMessage("themeEditor.setCustomTheme.instructions");
 
                 } catch (WebloggerException re) {
@@ -166,48 +162,35 @@ public class ThemeEdit extends UIAction 
                     addError("generic.error.check.logs");
                 }
             }
+
         } else if ("shared".equals(getThemeType())) {
 
             // make sure theme is valid and enabled
             Theme newTheme = null;
-            if (selectedThemeId == null) {
-                addError("No theme specified");
-            } else {
-                try {
-                    ThemeManager themeMgr = WebloggerFactory.getWeblogger()
-                            .getThemeManager();
-                    newTheme = themeMgr.getTheme(selectedThemeId);
 
-                    if (!newTheme.isEnabled()) {
-                        addError("Theme not enabled");
-                    }
-
-                } catch (Exception ex) {
-                    log.warn(ex);
-                    addError("Theme not found");
-                }
+            try {
+                ThemeManager themeMgr = 
WebloggerFactory.getWeblogger().getThemeManager();
+                newTheme = themeMgr.getTheme(selectedThemeId);
+            } catch (Exception ex) {
+                log.warn(ex);
+                addError("Theme not found");
             }
 
             if (!hasActionErrors()) {
                 try {
-
                     String originalTheme = weblog.getEditorTheme();
 
-                    WeblogManager mgr = WebloggerFactory.getWeblogger()
-                            .getWeblogManager();
+                    WeblogManager mgr = 
WebloggerFactory.getWeblogger().getWeblogManager();
 
                     // Remove old style sheet
-                    if (!WeblogTheme.CUSTOM.equals(originalTheme)
-                            && !originalTheme.equals(selectedThemeId)
-                            && getActionWeblog().getTheme().getStylesheet() != 
null) {
-
-                        WeblogTemplate stylesheet = mgr.getTemplateByLink(
-                                getActionWeblog(), getActionWeblog().getTheme()
-                                        .getStylesheet().getLink());
+                    if (!originalTheme.equals(selectedThemeId) && 
getActionWeblog().getTheme().getStylesheet() != null) {
+                        WeblogTemplate stylesheet = 
mgr.getTemplateByAction(getActionWeblog(),
+                                ComponentType.STYLESHEET);
 
                         if (stylesheet != null) {
                             // Remove template and its renditions
                             mgr.removeTemplate(stylesheet);
+                            sharedThemeCustomStylesheet = false;
                         }
                     }
 
@@ -230,16 +213,10 @@ public class ThemeEdit extends UIAction 
                     }
 
                 } catch (WebloggerException re) {
-                    log.error("Error saving weblog - "
-                            + getActionWeblog().getHandle(), re);
-                    addError("Error setting theme");
+                    log.error("Error saving weblog - " + 
getActionWeblog().getHandle(), re);
+                    addError("generic.error.check.logs");
                 }
             }
-
-            // unknown theme scenario, error
-        } else {
-            // invalid theme type
-            addError("no valid theme type submitted");
         }
 
         return execute();
@@ -300,12 +277,12 @@ public class ThemeEdit extends UIAction 
     }
 
     /**
-     * Checks if we have a custom stylesheet.
+     * Checks if we are using a shared theme with a custom stylesheet.
      * 
-     * @return true, if checks if is custom stylesheet
+     * @return true, if using a shared theme with a custom stylesheet; false 
otherwise.
      */
-    public boolean isCustomStylesheet() {
-        return customStylesheet;
+    public boolean isSharedThemeCustomStylesheet() {
+        return sharedThemeCustomStylesheet;
     }
 
 }

Modified: roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/ThemeEdit.jsp
URL: 
http://svn.apache.org/viewvc/roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/ThemeEdit.jsp?rev=1622537&r1=1622536&r2=1622537&view=diff
==============================================================================
--- roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/ThemeEdit.jsp 
(original)
+++ roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/ThemeEdit.jsp Thu Sep  
4 19:32:04 2014
@@ -78,7 +78,7 @@ function updateThemeChooser(selected) {
                 <s:text name="themeEditor.yourCurrentTheme" />:
                 <b><s:property value="actionWeblog.theme.name"/></b>
                 <%-- The type of stylesheet we are using --%>
-                <s:if test="%{customStylesheet}">
+                <s:if test="%{sharedThemeCustomStylesheet}">
                     <s:text name="themeEditor.yourCustomStylesheet" />
                 </s:if>
                 <s:else>


Reply via email to