[ 
https://issues.apache.org/jira/browse/SLING-6021?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15455891#comment-15455891
 ] 

Ivo Leitão commented on SLING-6021:
-----------------------------------

Hi thank you for the detailed feedback.

I've managed to solve this with a ResourceTransformer that I've attached to the 
issue. Bellow a snippet of the relevant areas. It was actually a little strange 
since initially I thought that I had to set the TransformationResult attributes 
property but I've managed to do it only by changing the dictionary directly (I 
later discovered that the attributes are for another purpose).  I don't know if 
there is a better way (I'm changing the dictionary instance that I receive not 
using the TransformationResult which seems a little odd :-S in api terms).

Taking into consideration the comments I plan to use this only in development 
not in prodution so I think I can keep this solution for the local environment 
of the developers.

{code:title=ResourceTransformer.java|borderStyle=solid}
        private String replaceVariables(String key, String value, 
Dictionary<String, Object> dictionary) {
                ...
        }

        private void transform(Dictionary<String, Object> dictionary) {
                Enumeration<String> keys = dictionary.keys();
                String key = null;
                Object value = null;
                while (keys.hasMoreElements()) {
                        key = keys.nextElement();
                        value = dictionary.get(key);

                        dictionary.put(key, value instanceof String ? 
replaceVariables(key, (String) value, dictionary) : value);
                }
        }

        @Override
        public TransformationResult[] transform(RegisteredResource resource) {
                if 
(InstallableResource.TYPE_PROPERTIES.equals(resource.getType())) {
                        TransformationResult tr = new TransformationResult();
                        
                        transform(resource.getDictionary());

                        return new TransformationResult[] { tr };
                }
                
                return null;
        }
{code}

> Supporting variable substitution in sling installer configuration factory
> -------------------------------------------------------------------------
>
>                 Key: SLING-6021
>                 URL: https://issues.apache.org/jira/browse/SLING-6021
>             Project: Sling
>          Issue Type: New Feature
>          Components: Installer
>    Affects Versions: Installer Configuration Factory 1.0.14
>            Reporter: Ivo Leitão
>            Priority: Minor
>         Attachments: PropertiesTransformer.java
>
>
> I'm not completely sure if this is a new feature or not but I've not find any 
> documentation that explains how to perform variable transformation in 
> configuration resources.
> In my use case I want to configure Apache Aries Transaction manager (snippet 
> bellow) and I would like to use the ${sling.home} environment variable
> aries.transaction.recoverable=true
> aries.transaction.timeout=600
> aries.transaction.howl.maxBlocksPerFile=513
> aries.transaction.howl.maxLogFiles=2
> aries.transaction.howl.logFileDir=${sling.home}
> aries.transaction.howl.bufferSizeKBytes=4
> Is it possible or this is a completly new feature ? (I' ve tested and it does 
> not work)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to