cancel
Showing results for 
Search instead for 
Did you mean: 

Replacing the topic & subtopic vocabularies in Nuxeo

jiyarza_Yarza
Confirmed Champ
Confirmed Champ

Hi,

I need to replace the subject field vocabularies by other domain specific tags. I want to do it in a plugin contribution so that it is easier for us to keep several environments in sync.

I have found how to contribute new vocabularies, but I don't know what do I need to override to replace the vanilla topic/subtopic with a custom vocabulary (it will also have 2 level hierarchy).

Anyone may point me in the right direction?

Edit: We are using Nuxeo CAP with DAM (5.6)

Thanks. Jose

1 ACCEPTED ANSWER

jiyarza_Yarza
Confirmed Champ
Confirmed Champ

Ok. This is what I have done in case it can be useful to someone:

I have overriden the topic and subtopic directories defined in nuxeo-platform-default-config. Like this:

In my plugin, I have created the csv files for topics and subtopics, with the same schemas than the originals (check the source!):

src/main/resources/directories/my-subtopic.csv
src/main/resources/directories/my-topic.csv

Then I have created the contribution file:

OSGI-INF/my-directories-contrib.xml

With this:

<?xml version="1.0"?>
<component name="org.my.ecm.directories"> 
  <require>org.nuxeo.ecm.directories</require>
  
  <extension target="org.nuxeo.ecm.directory.sql.SQLDirectoryFactory"
    point="directories">

    <directory name="subtopic">
      <schema>xvocabulary</schema>
      <parentDirectory>topic</parentDirectory>
      <dataSource>java:/nxsqldirectory</dataSource>
      <cacheTimeout>3600</cacheTimeout>
      <cacheMaxSize>1000</cacheMaxSize>
      <table>my_subtopic</table>
      <idField>id</idField>
      <autoincrementIdField>false</autoincrementIdField>
      <dataFile>directories/my-subtopic.csv</dataFile>
      <createTablePolicy>on_missing_columns</createTablePolicy>
    </directory>

    <directory name="topic">
      <schema>vocabulary</schema>
      <dataSource>java:/nxsqldirectory</dataSource>
      <cacheTimeout>3600</cacheTimeout>
      <cacheMaxSize>1000</cacheMaxSize>
      <table>my_topic</table>
      <idField>id</idField>
      <autoincrementIdField>false</autoincrementIdField>
      <dataFile>directories/my-topic.csv</dataFile>
      <createTablePolicy>on_missing_columns</createTablePolicy>
    </directory>
    
  </extension>

</component>

The table names must be different than the original ones.

Then, in META-INF/MANIFEST.MF:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: my-plugin
Bundle-SymbolicName: org.my.video;singleton:=true
Bundle-Version: 1.0.0
Bundle-Vendor: Me
Bundle-Category: web
Bundle-Localization: plugin
Nuxeo-Component: OSGI-INF/my-directories-contrib.xml
Require-Bundle: org.nuxeo.ecm.default.config

In OSGI-INF/l10n/ I have created the desired l10n properties for the topics and subtopics (must match the keys defined in the csv files), for instance:

OSGI-INF/l10n/messages.properties
OSGI-INF/l10n/messages_en.properties
OSGI-INF/l10n/messages_fr.properties

And finally in OSGI-INF/deployment-fragment.xml:

<?xml version="1.0"?>
<fragment version="1">
	<require>all</require>	
	<install>\
		<unzip from="${bundle.fileName}" to="/" prefix="web">
		    <include>/web/nuxeo.war/**</include>
		</unzip>
		<delete path="${bundle.fileName}.tmp" />
		<mkdir path="${bundle.fileName}.tmp" />
		<unzip from="${bundle.fileName}" to="${bundle.fileName}.tmp" />
			
		<append from="${bundle.fileName}.tmp/OSGI-INF/l10n/messages.properties"
		  to="nuxeo.war/WEB-INF/classes/messages.properties" addNewLine="true" />
		<append from="${bundle.fileName}.tmp/OSGI-INF/l10n/messages_en.properties"
		  to="nuxeo.war/WEB-INF/classes/messages_en.properties" addNewLine="true" />
		<append from="${bundle.fileName}.tmp/OSGI-INF/l10n/messages_fr.properties"
		  to="nuxeo.war/WEB-INF/classes/messages_fr.properties" addNewLine="true" />
		<delete path="${bundle.fileName}.tmp" />
	</install>
</fragment>

Cheers.

View answer in original post

1 REPLY 1

jiyarza_Yarza
Confirmed Champ
Confirmed Champ

Ok. This is what I have done in case it can be useful to someone:

I have overriden the topic and subtopic directories defined in nuxeo-platform-default-config. Like this:

In my plugin, I have created the csv files for topics and subtopics, with the same schemas than the originals (check the source!):

src/main/resources/directories/my-subtopic.csv
src/main/resources/directories/my-topic.csv

Then I have created the contribution file:

OSGI-INF/my-directories-contrib.xml

With this:

<?xml version="1.0"?>
<component name="org.my.ecm.directories"> 
  <require>org.nuxeo.ecm.directories</require>
  
  <extension target="org.nuxeo.ecm.directory.sql.SQLDirectoryFactory"
    point="directories">

    <directory name="subtopic">
      <schema>xvocabulary</schema>
      <parentDirectory>topic</parentDirectory>
      <dataSource>java:/nxsqldirectory</dataSource>
      <cacheTimeout>3600</cacheTimeout>
      <cacheMaxSize>1000</cacheMaxSize>
      <table>my_subtopic</table>
      <idField>id</idField>
      <autoincrementIdField>false</autoincrementIdField>
      <dataFile>directories/my-subtopic.csv</dataFile>
      <createTablePolicy>on_missing_columns</createTablePolicy>
    </directory>

    <directory name="topic">
      <schema>vocabulary</schema>
      <dataSource>java:/nxsqldirectory</dataSource>
      <cacheTimeout>3600</cacheTimeout>
      <cacheMaxSize>1000</cacheMaxSize>
      <table>my_topic</table>
      <idField>id</idField>
      <autoincrementIdField>false</autoincrementIdField>
      <dataFile>directories/my-topic.csv</dataFile>
      <createTablePolicy>on_missing_columns</createTablePolicy>
    </directory>
    
  </extension>

</component>

The table names must be different than the original ones.

Then, in META-INF/MANIFEST.MF:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: my-plugin
Bundle-SymbolicName: org.my.video;singleton:=true
Bundle-Version: 1.0.0
Bundle-Vendor: Me
Bundle-Category: web
Bundle-Localization: plugin
Nuxeo-Component: OSGI-INF/my-directories-contrib.xml
Require-Bundle: org.nuxeo.ecm.default.config

In OSGI-INF/l10n/ I have created the desired l10n properties for the topics and subtopics (must match the keys defined in the csv files), for instance:

OSGI-INF/l10n/messages.properties
OSGI-INF/l10n/messages_en.properties
OSGI-INF/l10n/messages_fr.properties

And finally in OSGI-INF/deployment-fragment.xml:

<?xml version="1.0"?>
<fragment version="1">
	<require>all</require>	
	<install>\
		<unzip from="${bundle.fileName}" to="/" prefix="web">
		    <include>/web/nuxeo.war/**</include>
		</unzip>
		<delete path="${bundle.fileName}.tmp" />
		<mkdir path="${bundle.fileName}.tmp" />
		<unzip from="${bundle.fileName}" to="${bundle.fileName}.tmp" />
			
		<append from="${bundle.fileName}.tmp/OSGI-INF/l10n/messages.properties"
		  to="nuxeo.war/WEB-INF/classes/messages.properties" addNewLine="true" />
		<append from="${bundle.fileName}.tmp/OSGI-INF/l10n/messages_en.properties"
		  to="nuxeo.war/WEB-INF/classes/messages_en.properties" addNewLine="true" />
		<append from="${bundle.fileName}.tmp/OSGI-INF/l10n/messages_fr.properties"
		  to="nuxeo.war/WEB-INF/classes/messages_fr.properties" addNewLine="true" />
		<delete path="${bundle.fileName}.tmp" />
	</install>
</fragment>

Cheers.

Getting started

Attention: Blogs & Forums are in READ-ONLY mode from Oct 9-19 as we transition to our new platform. Learn more.

Find what you came for

We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.