[opencms-dev] How do I update shared properties?

Thomas Göttlich guo.tuomi at googlemail.com
Wed Oct 5 15:21:19 CEST 2011


Hi Paul,

yes, it would just be a one-time thing to do.
However, it would have to be done in at least 3 systems, so I'd like to
automate that process to some extent.

But you're right, that might be overkill.
I'll first have a look at your script and then I'll decide where to put the
code and how to execute it.

Thanks again.

Cheers,

Thomas

2011/10/5 Paul-Inge Flakstad <flakstad at npolar.no>

> Hi again Thomas,****
>
> ** **
>
> Well, if you’ve already updated the relevant property settings in
> opencms-modules.xml, I don’t see any need to add this to an action class.
> Like you said, only existing resources need modification. So isn’t it just a
> matter of processing all your existing resources, using the provided script
> (or another tool of your choice)?****
>
> ** **
>
> Cheers,****
>
> Paul****
>
> ** **
>
> *From:* opencms-dev-bounces at opencms.org [mailto:
> opencms-dev-bounces at opencms.org] *On Behalf Of *Thomas Göttlich
> *Sent:* 5. oktober 2011 14:28
>
> *To:* The OpenCms mailing list
> *Subject:* Re: [opencms-dev] How do I update shared properties?****
>
> ** **
>
> HI Paul,
>
> thanks for the info and the script.
>
> I'll look into it.
> If possible I'll try and add that to my module action, however.
> That way it should be executed when the module is deployed/updated.
> I'll keep you posted on my progress.
>
> Thanks again.
>
> Cheers,
>
> Thomas****
>
> 2011/10/5 Paul-Inge Flakstad <flakstad at npolar.no>****
>
> Hi Thomas,****
>
>  ****
>
> If you can’t do this using the Admin panel (apparently it has no switch to
> specify shared/individual property, so I see the problem) I think the
> easiest solution would be to write a simple JSP script that does the job.*
> ***
>
>  ****
>
> I’ve included a script that I wrote some time ago. HTH.****
>
>  ****
>
> Cheers,****
>
> Paul****
>
>  ****
>
> <%-- ****
>
>     Document   : script-change-property****
>
>     Created on : 16.mar.2011, 14:19:29****
>
>     Author     : Paul-Inge Flakstad <flakstad at npolar.no>****
>
> --%><%@ page import="org.opencms.jsp.CmsJspActionElement,****
>
>                  java.util.List,****
>
>                  java.util.Iterator,****
>
>                  java.util.Locale,****
>
>                  org.opencms.file.CmsObject,****
>
>                  org.opencms.file.CmsResource,****
>
>                  org.opencms.file.CmsResourceFilter,****
>
>                  org.opencms.file.CmsProperty,****
>
>                  org.opencms.main.OpenCms" session="true" %><%!****
>
>                  ****
>
> /******
>
> * Gets an exception's stack strace as a string.****
>
> */****
>
> public String getStackTrace(Exception e) {****
>
>     String trace = "<div style=\"border:1px solid #900; color:#900;
> font-family:Courier, Monospace; font-size:80%; padding:1em; margin:2em;\">";
> ****
>
>     trace+= "<p style=\"font-weight:bold;\">" + e.getMessage() + "</p>";**
> **
>
>     StackTraceElement[] ste = e.getStackTrace();****
>
>     for (int i = 0; i < ste.length; i++) {****
>
>         StackTraceElement stElem = ste[i];****
>
>         trace += stElem.toString() + "<br />";****
>
>     }****
>
>     trace += "</div>";****
>
>     return trace;****
>
> }****
>
> %><%****
>
> // Action element and CmsObject****
>
> CmsJspActionElement cms = new CmsJspActionElement(pageContext, request,
> response);****
>
> CmsObject cmso = cms.getCmsObject();****
>
> // Locale****
>
> Locale locale = cms.getRequestContext().getLocale();****
>
> String loc = locale.toString();****
>
> // Constants used in the script****
>
> final String FOLDER = "/your/content/folder/"; // Folders to collect files
> from****
>
> final String RESOURCE_TYPE_NAME = "your_resource_type_name"; // The type
> name of resources to collect****
>
> final String PROPERTY_NAME = "your_property_name"; // The name of the
> property to change****
>
> final String OLD_VALUE = "your_old_value"; // The old property value****
>
> final String NEW_VALUE = "your_new_value"; // The new property value****
>
> final boolean READ_TREE = true; // Collect files in sub-tree?****
>
> // Filter for the resource type****
>
> final CmsResourceFilter FILTER =
> CmsResourceFilter.ALL.addRequireType(OpenCms.getResourceManager().getResourceType(RESOURCE_TYPE_NAME).getTypeId());
> ****
>
>  ****
>
> // Get files****
>
> List filesInFolder = cmso.readResources(FOLDER, FILTER, READ_TREE);****
>
> Iterator iFilesInFolder = filesInFolder.iterator();****
>
>  ****
>
> // Process collected files****
>
> while (iFilesInFolder.hasNext()) {****
>
>     CmsResource resource = (CmsResource)iFilesInFolder.next(); // Get the
> next collected resource****
>
>     String resourceName = resource.getName(); // The collected resource's
> name****
>
>     String resourcePath = cmso.getSitePath(resource); // The collected
> resource's path, relative to the current site****
>
>     ****
>
>     // Get a list of all siblings (includes the resource itself)****
>
>     List siblings = cmso.readSiblings(resourcePath, FILTER);****
>
>     ****
>
>     // Print some info****
>
>     out.println("<h4>Collected file: <code>" + resourcePath + " (" +
> resourceName + ")</code> plus " + (siblings.size()-1) + " siblings</h4>");
> ****
>
>     out.println("Using locale: <code>" + loc + "</code><br />");****
>
>         ****
>
>     try {****
>
>         // Get the property object, which will be used to modify property
> value****
>
>         CmsProperty property = cmso.readPropertyObject(resource,
> PROPERTY_NAME, false);****
>
>  ****
>
>         //****
>
>         // Here you could add check for whether or not the property needs
> to be written****
>
>         //****
>
>         ****
>
>         // Handle case: null-property****
>
>         if (property.isNullProperty()) {****
>
>             property = new CmsProperty(PROPERTY_NAME, null, null, true);**
> **
>
>         }        ****
>
>         ****
>
>         // Set and write the property value****
>
>         out.println("Writing (" + PROPERTY_NAME + "='" + NEW_VALUE + "' on
> resource " + resourcePath + ") ...<br />");****
>
>         ****
>
>         //cmso.lockResource(resourcePath); // Commented out ==> Require
> (parent folder) lock to be present before running this script****
>
>         property.setValue(NEW_VALUE, CmsProperty.TYPE_SHARED); // Write the
> value as shared****
>
>         property.setValue("", CmsProperty.TYPE_INDIVIDUAL); // Remove any
> individual value****
>
>             ****
>
>         //****
>
>         // IMPORTANT: Comment out the next line to run a test of the script
> without writing anything****
>
>         //****
>
>         //cmso.writePropertyObject(resourcePath, property); // Write
> property on the resource****
>
>         ****
>
>         //cmso.unlockResource(resourcePath); // Commented out ==> Require
> (parent folder) lock to be present before running this script****
>
>         ****
>
>         ****
>
>         // Handle siblings****
>
>         Iterator iSiblings = siblings.iterator();****
>
>         while (iSiblings.hasNext()) {****
>
>             CmsResource sibling = (CmsResource)iSiblings.next();****
>
>             String siblingPath = cmso.getSitePath(sibling);****
>
>             if (!siblingPath.equals(resourcePath)) {****
>
>                 out.println("Processing sibling: <code>" + siblingPath +
> "</code><br />");****
>
>                 // Do something with the sibling****
>
>             }****
>
>         }****
>
>         ****
>
>         out.println("Done!<br />");****
>
>         out.println("<hr />"); ****
>
>     } catch (Exception e) {****
>
>         out.println(getStackTrace(e));****
>
>     }****
>
> }****
>
> %>****
>
>  ****
>
> *From:* opencms-dev-bounces at opencms.org [mailto:
> opencms-dev-bounces at opencms.org] *On Behalf Of *Thomas Göttlich
> *Sent:* 5. oktober 2011 11:01
> *To:* The OpenCms mailing list
> *Subject:* [opencms-dev] How do I update shared properties?****
>
>  ****
>
> Hi all,
>
> I'm currently restructuring our site and modules.
> During this process, some templates are moved from one module to another.
> However, there are a couple of existing pages that have the shared property
> "template-elements" already set and I don't know how to update them.
>
> Of course I can update the indivudal file properties in administration but
> that would result in quite inconsistent properties.
>
> Example:
>
> old template path:
> /system/modules/my.module.old/templates/sometemplate.jsp
> new template path: /system/modules/my.module.new/templates/sometemplate.jsp
>
> When I update the individual properties for the files that use that
> template, I get this:
>
>
> somefile:
> - template-elements (indiv.):
> /system/modules/my.module.new/templates/sometemplate.jsp    <-- this is ok
> - template-elements (shared):
> /system/modules/my.module.old/templates/sometemplate.jsp   <-- still the old
> value
>
> I changed the resourcetype definition to use the new path as shared
> "template-elements" property, but that didn't update the existing files.
>
> How would I do that?
>
> Regards,
>
> Thomas****
>
>
>
> _______________________________________________
> This mail is sent to you from the opencms-dev mailing list
> To change your list options, or to unsubscribe from the list, please visit
> http://lists.opencms.org/mailman/listinfo/opencms-dev****
>
> ** **
>
>
> _______________________________________________
> This mail is sent to you from the opencms-dev mailing list
> To change your list options, or to unsubscribe from the list, please visit
> http://lists.opencms.org/mailman/listinfo/opencms-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://webmail.opencms.org/pipermail/opencms-dev/attachments/20111005/76214a1f/attachment.htm>


More information about the opencms-dev mailing list