Package org.jboss.metadata.ejb.jboss

Source Code of org.jboss.metadata.ejb.jboss.ContainerConfigurationsMetaDataWrapper

/*
* JBoss, Home of Professional Open Source
* Copyright 2007, Red Hat Middleware LLC, and individual contributors
* 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.metadata.ejb.jboss;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

import org.jboss.annotation.javaee.Descriptions;
import org.jboss.metadata.ejb.jboss.ContainerConfigurationMetaData;
import org.jboss.metadata.ejb.jboss.ContainerConfigurationsMetaData;

/**
* Wrapper for jboss.xml/standardjboss.xml type of primary/defaults
* @author Scott.Stark@jboss.org
* @version $Revision: 66588 $
*/
public class ContainerConfigurationsMetaDataWrapper extends ContainerConfigurationsMetaData
{
   private static final long serialVersionUID = 1;
   private ContainerConfigurationsMetaData primary;
   private ContainerConfigurationsMetaData defaults;
   private HashMap<String, ContainerConfigurationMetaData> merged = new HashMap<String, ContainerConfigurationMetaData>();

   /**
    * create a wrapper for jboss.xml/standardjboss.xml type of primary/defaults
    * @param primary - the jboss.xml container configuration metadata
    * @param defaults - the standardjboss.xml container configuration metadata
    */
   ContainerConfigurationsMetaDataWrapper(ContainerConfigurationsMetaData primary,
      ContainerConfigurationsMetaData defaults)
   {
      this.primary = primary;
      this.defaults = defaults;
      if(defaults == null)
         throw new IllegalStateException("defaults cannot be null");

      if(defaults != null)
      for(String key : defaults.keySet())
      {
         ContainerConfigurationMetaData md = defaults.get(key);
         String extendsName = md.getExtendsName();
         if (extendsName != null)
         {
            // Look first for another non-default parent
            ContainerConfigurationMetaData parent = merged.get(extendsName);
            if (parent == null)
               parent = defaults.get(extendsName);
            if (parent == null)
               throw new IllegalStateException("Failed to find parent configuration: "+extendsName+" among: "+defaults.keySet());
            ContainerConfigurationMetaDataWrapper wrapper = new ContainerConfigurationMetaDataWrapper(md, parent);
            md = wrapper;
         }
         else
            md = new ContainerConfigurationMetaDataWrapper(md, null);
         merged.put(key, md);
      }
      if(primary != null)
      for(String key : primary.keySet())
      {
         ContainerConfigurationMetaData md = primary.get(key);
         String extendsName = md.getExtendsName();
         if (extendsName != null)
         {
            ContainerConfigurationMetaData parent = primary.get(extendsName);
            if (parent == null)
               parent = merged.get(extendsName);
            if (parent == null)
               parent = defaults.get(extendsName);
            if (parent == null)
            {
               throw new IllegalStateException("Failed to find parent configuration: "
                     +extendsName+" among defaults: "+defaults.keySet()
                     +" config: "+primary.keySet());
            }
            ContainerConfigurationMetaDataWrapper wrapper = new ContainerConfigurationMetaDataWrapper(md, parent);
            md = wrapper;
         }
         else
            md = new ContainerConfigurationMetaDataWrapper(md, null);
         merged.put(key, md);
      }
   }

   public boolean containsKey(String key)
   {
      return merged.containsKey(key);
   }

   public ContainerConfigurationMetaData get(String key)
   {
      ContainerConfigurationMetaData ccmd = merged.get(key);
      return ccmd;
   }

   public Descriptions getDescriptions()
   {
      Descriptions descriptions = null;
      if(primary != null )
         descriptions = primary.getDescriptions();
      if(descriptions == null)
         descriptions = defaults.getDescriptions();
      return descriptions;
   }

   public String getId()
   {
      String id = primary != null ? primary.getId() : null;
      if(id == null)
         id = defaults.getId();
      return id;
   }

   public boolean isEmpty()
   {
      boolean isEmpty = merged.isEmpty();
      return isEmpty;
   }

   public Iterator<ContainerConfigurationMetaData> iterator()
   {
      return merged.values().iterator();
   }

   public Set<String> keySet()
   {
      return merged.keySet();
   }

  
   @Override
   public int size()
   {
      return merged.size();
   }

   public Object[] toArray()
   {
      return merged.values().toArray();
   }

   public <X> X[] toArray(X[] a)
   {
      return merged.values().toArray(a);
   }

   public String toString()
   {
      return merged.toString();
   }
}
TOP

Related Classes of org.jboss.metadata.ejb.jboss.ContainerConfigurationsMetaDataWrapper

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.