Alfresco 5: using just only alfresco-global.properties

Deploying Alfresco artifacts in several environments requires different parameters in configuration files.

Some time ago I was working with Alfresco in a maven way: packaging properties together with the artifact by using profiles. This method requires several packagings for the same module: one for each environment.

Alfresco experienced developers, and alfresco documentation itself, are suggesting to include module properties just only in alfresco-global.properties for repo artifacts and in share-config-custom.xml for share artifacts.

However, this is one more file than required. Let me share with you how to use alfresco-global.properties for share modules with the following example.

Properties

Including properties values in alfresco-global.properties.

customHeaderModule.url=http://intranet.keensoft.local/alfresco/cabecera.html 
customHeaderModule.height=216px

Repo project

Exposing these properties as a REST service.

1. Describing the REST service
/src/main/amp/config/alfresco/extension/templates/webscripts/es/keensoft/custom-actions/headerParams.get.desc.xml

<webscript>
  <shortname>Get header params</shortname>
  <description>Get header params
  To test: curl -v -u "http://localhost:8080/alfresco/service/keensoft/header/params"
  </description>
  <family>keensoft</family>
  <url>/keensoft/header/params</url>
  <format default="json"/>
  <authentication>none</authentication>
  <transaction>none</transaction>
</webscript>

2. Declaring Spring bean for the Web Script
/src/main/amp/config/alfresco/module/custom-actions/context/services-context.xml

<!-- Return params from alfresco-global.properties -->
<bean id="webscript.es.keensoft.custom-actions.headerParams.get" 
      class="es.keensoft.alfresco.action.webscript.HeaderParamsWebScript" parent="webscript">
	<property name="url" value="${customHeaderModule.url}" />
    <property name="height" value="${customHeaderModule.height}"/>
</bean>

3. Implementing logic for the service
/src/main/java/es/keensoft/alfresco/action/webscript/HeaderParamsWebScript.java

package es.keensoft.alfresco.action.webscript;

import java.io.IOException;

import org.json.simple.JSONObject;
import org.springframework.extensions.webscripts.AbstractWebScript;
import org.springframework.extensions.webscripts.WebScriptRequest;
import org.springframework.extensions.webscripts.WebScriptResponse;
import org.springframework.http.MediaType;

public class HeaderParamsWebScript  extends AbstractWebScript {
	
	private String url;
	private String height;
	
	@SuppressWarnings("unchecked")
	@Override
	public void execute(WebScriptRequest request, WebScriptResponse response) throws IOException {
		
		JSONObject obj = new JSONObject();
		obj.put("customHeaderModuleHeight", height);
		obj.put("customHeaderModuleUrl", url);
    	
    	String jsonString = obj.toString();
    	response.setContentEncoding("UTF-8");
    	response.setContentType(MediaType.APPLICATION_JSON.toString());
    	response.getWriter().write(jsonString);
	
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public void setHeight(String height) {
		this.height = height;
	}

}

Share project

Recovering alfresco-global.properties value by using Alfresco REST API.

1. Declaring Surf customization
/src/main/amp/config/alfresco/web-extension/site-data/extensions/custom-header.xml

<extension>
  <modules>
    <module>
      <id>Custom Header</id>
      <version>1.0</version>
      <auto-deploy>true</auto-deploy>
      <customizations>
          <customization>
              <targetPackageRoot>org.alfresco.share.header</targetPackageRoot>
              <sourcePackageRoot>es.keensoft.share.header</sourcePackageRoot>
          </customization>
      </customizations>
    </module>
  </modules>
</extension>

2. Recovering values from REST service
/src/main/amp/config/alfresco/web-extension/site-webscripts/es/keensoft/share/header/share-header.get.js

function main() {
	var headerParams = jsonConnection("/keensoft/header/params");
	model.url = headerParams.customHeaderModuleUrl;
	model.height = headerParams.customHeaderModuleHeight;
}

main();

function jsonConnection(url) {
	
	var connector = remote.connect("alfresco"),
		result = connector.get(url);

	if (result.status == 200) {		
		return eval('(' + result + ')')
	} else {
		return null;
	}
}

3. Extending view by using FTL
/src/main/amp/config/alfresco/web-extension/site-webscripts/es/keensoft/share/header/share-header.get.html.ftl

<@markup id="custom-header-resources" action="before" target="html">
	<iframe id="ifHeader" name="ifHeader" scrolling="auto" frameborder="0"
	    width="100%" 
	    height="${height}" 
	    src="${url}">
	</iframe>
</@markup>

Result

A new header is showed above original Alfresco header. Url and height parameters are recovered from alfresco-global.properties

alfresco-header-customized

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s