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

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.