[opencms-dev] Adding a user-defined relation

Paul-Inge Flakstad flakstad at npolar.no
Tue Aug 25 20:14:25 CEST 2009


Self-replying. :-)

This was easy to do once I found out how, but actually finding out how was
a little tricky. I couldn't find much on the web and had to resolve to the old
"browse-the-source-code-you-f**ing-noob" to get a grip. I haven't tested this
much, so I don't know if I'm actually doing it right, but so far it seems to
be working.
---

To add a user-defined custom relation type, you'll have to edit opencms-vfs.xml.
(opencms-vfs.xml is one of OpenCms' configuration files, and is found in:
$TOMCAT_HOME/webapps/$OPENCMS_WEBAPP_NAME/WEB-INF/config/)

Find the <resources> node in this file, and add your relation inside it like this:

<resources>
    ....
    <relationtypes>
        <relationtype name="YOUR_RELATIONTYPE_NAME" type="strong" /><!-- the type can be either strong or weak -->
    </relationtypes>
    ...
</resources>

(Note that the <relationtypes> element does not exist out of the box. It does not
matter where you decide to put it, as long as it becomes an "immediate child"
to the <resources> element. I placed mine directly after </mimetypes>.)

In order for these changes to take effect, re-initialize OpenCms (restart Tomcat).

You can test that your new relation type exists by listing all relation types.
Use a simple JSP like this one to do that:

<%@ page import="org.opencms.relations.*, java.util.*" session="true" %>
<%
List relationTypesAll = CmsRelationType.getAll();
CmsRelationType rt = null;
Iterator i = relationTypesAll.iterator();
out.print("<ul>");
while (i.hasNext()) {
    rt = (CmsRelationType)i.next();
    out.print("<li>NAME: " + rt.getName() + ", TYPE: " + rt.getType());
}
out.print("</ul>");
%>


To use a relation programatically:
CmsRelationType rt = CmsRelationType.valueOf("YOUR_RELATIONTYPE_NAME");
yourCmsObjectInstance.addRelationToResource(fromResourcePath, toResourcePath, rt.getName());


Cheers,
Paul

________________________________
From: opencms-dev-bounces at opencms.org [mailto:opencms-dev-bounces at opencms.org] On Behalf Of Paul-Inge Flakstad
Sent: 25. august 2009 17:10
To: opencms-dev at opencms.org
Subject: [opencms-dev] Adding a user-defined relation

Hello list!

I've tried to add a user-defined relation to OpenCms using the following approaches:
1.) in a JSP file by calling the constructor in org.opencms.relations.CmsRelationType.
2.) by creating a module with an action class, and calling the above mentioned constructor
from the action class' initialize-method.

Approach 1.) produced an error.
Approach 2.) did not produce any error, but when getting the list of relation types from
CmsRelationType.getAll(), my user-defined relation is not there. Also, trying to use
my user-defined relation with addRelationToResource() does not work. It gives an
exception telling me that:

The value "801" can not be parsed into an enum element of type "org.opencms.relations.CmsRelationType"

(Which btw is kinda interesting, sice I actually try to use the value "901", not "801", which is
the ID I assigned my user-defined relation.)

Is anyone able to tell me how to add a user-defined relation?

Thanks,
Paul
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://webmail.opencms.org/pipermail/opencms-dev/attachments/20090825/0d84a99d/attachment.htm>


More information about the opencms-dev mailing list