Package org.jboss.as.integration.hornetq.management.template

Source Code of org.jboss.as.integration.hornetq.management.template.HornetQDestinationTemplate

/*
* JBoss, Home of Professional Open Source
* Copyright (c) 2010, JBoss Inc., and individual contributors as indicated
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.as.integration.hornetq.management.template;

import java.io.File;
import java.io.FileWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

import javax.naming.Context;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

import org.hornetq.jms.server.config.ConnectionFactoryConfiguration;
import org.hornetq.jms.server.config.JMSConfiguration;
import org.hornetq.jms.server.config.JMSQueueConfiguration;
import org.hornetq.jms.server.config.TopicConfiguration;
import org.jboss.deployers.spi.management.DeploymentTemplate;
import org.jboss.managed.api.DeploymentTemplateInfo;
import org.jboss.managed.api.ManagedProperty;
import org.jboss.managed.api.annotation.ViewUse;
import org.jboss.metatype.api.types.CompositeMetaType;
import org.jboss.metatype.api.values.CompositeValue;
import org.jboss.metatype.api.values.MapCompositeValueSupport;
import org.jboss.metatype.api.values.MetaValue;
import org.jboss.metatype.api.values.MetaValueFactory;
import org.jboss.metatype.api.values.SimpleValue;
import org.jboss.metatype.plugins.values.MetaValueFactoryBuilder;
import org.jboss.vfs.VirtualFile;
import org.jboss.vfs.VFS;

/**
* A HornetQDestinationTemplate.
*
* @author <a href="alex@jboss.com">Alexey Loubyansky</a>
* @version $Revision: 1.1 $
*/
public class HornetQDestinationTemplate implements DeploymentTemplate
{
   /** The file suffix. */
   private static final String FILE_SUFFIX = "hornetq-jms.xml";
  
   /** The role attributes. */
   protected static final String[] attributes = new String[] { "read", "write", "create"};
  
   private static final MetaValueFactory mvf = MetaValueFactoryBuilder.create();
  
   private DeploymentTemplateInfo info;

   public VirtualFile applyTemplate(DeploymentTemplateInfo info) throws Exception
   {
      // Create a temp file
      File xml = File.createTempFile(getClass().getSimpleName(), FILE_SUFFIX);
      // Write template
      writeTemplate(xml, info);
      // Return virtual file
     
      return VFS.getChild(xml.toURI());
   }

   public String getDeploymentName(String deploymentBaseName)
   {
      if(deploymentBaseName == null)
         throw new IllegalArgumentException("Null base name.");
     
      if(deploymentBaseName.endsWith(FILE_SUFFIX) == false)
         deploymentBaseName = deploymentBaseName + FILE_SUFFIX;
     
      return deploymentBaseName;
   }

   public DeploymentTemplateInfo getInfo()
   {
      return info;
   }

   public void setInfo(DeploymentTemplateInfo info)
   {
      this.info = info;
   }
  
   private void writeTemplate(File xml, DeploymentTemplateInfo info) throws Exception
   {
      if (info == null)
         throw new IllegalArgumentException("Null template info.");
      if (info.getProperties() == null)
         throw new IllegalArgumentException("Null template info.");

      JAXBJMSConfiguration config = new JAXBJMSConfiguration();

      // Look for the destination type using the destinationType ManagedProperty
      ManagedProperty destTypeMP = info.getProperties().get("destinationType");
      String destinationType = null;
      if(destTypeMP == null)
      {
         // Try casting this to a DsDataSourceTemplateInfo
         destinationType = ((HornetQDestinationTemplateInfo)info).getDestinationType();
      }
      else
      {
         SimpleValue dsTypeSV = (SimpleValue) destTypeMP.getValue();
         destinationType = dsTypeSV.getValue().toString();
      }

      String destinationName = (String) getProperty(info, "name");
      if(destinationName == null)
         throw new IllegalStateException("Destination name has not been specified!");

      String[] bindings = (String[]) getProperty(info, "bindings");
      if(bindings == null)
         throw new IllegalStateException("bindings have not been specified!");

      if("QueueTemplate".equals(destinationType))
      {
         JAXBJMSQueueConfiguration queue = new JAXBJMSQueueConfiguration();
         config.setQueueConfigurations(Arrays.asList(new JMSQueueConfiguration[]{queue}));
         queue.setName(destinationName);
         queue.setBindings(bindings);
      }
      else if("TopicTemplate".equals(destinationType))
      {
         JAXBJMSTopicConfiguration topic = new JAXBJMSTopicConfiguration();
         config.setTopicConfigurations(Arrays.asList(new TopicConfiguration[]{topic}));
         topic.setName(destinationName);
         topic.setBindings(bindings);
      }
      else
         throw new IllegalStateException("Unsupported destination type: " + destinationType);

      JAXBContext context = JAXBContext.newInstance(JAXBJMSConfiguration.class);
      Marshaller marshaller = context.createMarshaller();
      marshaller.setProperty("jaxb.formatted.output", Boolean.TRUE);

      JAXBElement<JAXBJMSConfiguration> root = new JAXBElement<JAXBJMSConfiguration>(
            new javax.xml.namespace.QName("urn:hornetq", "configuration"), JAXBJMSConfiguration.class, null, config);

      Writer fw = null;
      try
      {
         fw = new FileWriter(xml);
         marshaller.marshal(root, fw);
      }
      finally
      {
         if (fw != null)
         {
            fw.close();
         }
      }
   }
  
   /**
    * Extract the value from the property MetaValue
    * @param info - template info
    * @param propName - the name of the property to return a value for
    * @return the unwrapped property value
    */
   private Object getProperty(DeploymentTemplateInfo info, String propName)
   {
      Map<String, ManagedProperty> propsInfo = info.getProperties();
      ManagedProperty prop = propsInfo.get(propName);
      if(prop == null)
      {
         return null;
      }
      Object value = prop.getValue();
      if(value instanceof MetaValue)
      {
         return mvf.unwrap((MetaValue) value);
      }
      return value;
   }
}
TOP

Related Classes of org.jboss.as.integration.hornetq.management.template.HornetQDestinationTemplate

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.