Package org.jboss.seam.wiki.core.plugin.binding.lacewiki

Source Code of org.jboss.seam.wiki.core.plugin.binding.lacewiki.PluginI18NDeploymentHandler

/*
* JBoss, Home of Professional Open Source
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jboss.seam.wiki.core.plugin.binding.lacewiki;

import org.jboss.seam.wiki.core.plugin.metamodel.Plugin;
import org.jboss.seam.wiki.core.exception.InvalidWikiConfigurationException;
import org.jboss.seam.deployment.AbstractDeploymentHandler;
import org.jboss.seam.deployment.DeploymentMetadata;
import org.jboss.seam.deployment.DeploymentStrategy;
import org.jboss.seam.deployment.FileDescriptor;
import org.jboss.seam.Component;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
* Finds (during startup scanning) all plugin messages files, using the pattern
* <tt>[package]/[specialPluginI18Npackagename]/messages_[pluginKey]_[locale].properties</tt>.
* Any found file name is converted into a resource bundle name and added to an internal
* list. Other components can then read this list by getting an instance of this deployment
* handler, during startup.
*
* @see PluginI18NBinder
*
* @author Christian Bauer
*/
public class PluginI18NDeploymentHandler extends AbstractDeploymentHandler {

    public static final String NAME = "pluginI18NDeploymentHandler";
    public static final String MESSAGES_PATTERN =
        "^([a-zA-Z0-9/]+)"+Plugin.PACKAGE_I18N_MESSAGES+"_("+Plugin.KEY_PATTERN+")_([a-zA-Z_]+)\\.properties$";

    private static DeploymentMetadata deploymentMetadata = new DeploymentMetadata()
    {

      public String getFileNameSuffix()
      {
         return ".properties";
      }
      
    };
   
    private Pattern compiledPattern;
   
    public PluginI18NDeploymentHandler()
    {
        compiledPattern = Pattern.compile(MESSAGES_PATTERN);
    }
   
    @Override
    public void postProcess(ClassLoader classLoader) {
        for (FileDescriptor fileDescriptor : getResources())
        {
            Matcher matcher = compiledPattern.matcher(fileDescriptor.getName());
            if (matcher.matches()) {
                String[] groups = new String[matcher.groupCount()];
                for (int i = 0; i < groups.length; i++) {
                   groups[i] = matcher.group(i+1);
                }
                if (groups == null || groups.length != 3) {
                    throw new InvalidWikiConfigurationException("Deployment of i18n properties failed");
                }
                String packageName = groups[0];
                String pluginKey = groups[1];
                String locale = groups[2]; // Don't really need it here

                if (packageName.endsWith(Plugin.PACKAGE_I18N+"/")) {
                    String bundleName = packageName.replaceAll("/", ".") + "messages_" + pluginKey;
                    getMessageBundleNames().add(bundleName);
                }
            }
        }
    }

    public String getName() {
        return NAME;
    }
   
    private List<String> messageBundleNames = new ArrayList<String>();

    public List<String> getMessageBundleNames() {
        return messageBundleNames;
    }

    public static PluginI18NDeploymentHandler instance() {
        DeploymentStrategy deployment = (DeploymentStrategy) Component.getInstance("deploymentStrategy");
        return (PluginI18NDeploymentHandler) deployment.getDeploymentHandlers().get(NAME);
    }
   
    public DeploymentMetadata getMetadata()
    {
        return deploymentMetadata;
    }

}
TOP

Related Classes of org.jboss.seam.wiki.core.plugin.binding.lacewiki.PluginI18NDeploymentHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.