Package org.jboss.kernel.plugins.annotations

Source Code of org.jboss.kernel.plugins.annotations.ExternalInstallationAnnotationPlugin

/*     */ package org.jboss.kernel.plugins.annotations;
/*     */
/*     */ import java.lang.annotation.Annotation;
/*     */ import java.util.ArrayList;
/*     */ import java.util.List;
/*     */ import org.jboss.beans.metadata.api.annotations.ExternalInstall;
/*     */ import org.jboss.beans.metadata.api.annotations.Value;
/*     */ import org.jboss.beans.metadata.plugins.AbstractInstallMetaData;
/*     */ import org.jboss.beans.metadata.plugins.AbstractParameterMetaData;
/*     */ import org.jboss.beans.metadata.spi.BeanMetaData;
/*     */ import org.jboss.beans.metadata.spi.InstallMetaData;
/*     */ import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
/*     */ import org.jboss.beans.metadata.spi.ParameterMetaData;
/*     */ import org.jboss.beans.metadata.spi.ValueMetaData;
/*     */ import org.jboss.dependency.spi.ControllerState;
/*     */ import org.jboss.kernel.spi.dependency.KernelControllerContext;
/*     */ import org.jboss.reflect.spi.ClassInfo;
/*     */
/*     */ public abstract class ExternalInstallationAnnotationPlugin<C extends Annotation> extends ClassAnnotationPlugin<C>
/*     */ {
/*     */   protected ExternalInstallationAnnotationPlugin(Class<C> annotation)
/*     */   {
/*  51 */     super(annotation);
/*     */   }
/*     */
/*     */   protected abstract List<InstallMetaData> getExistingInstallMetaData(BeanMetaData paramBeanMetaData);
/*     */
/*     */   protected abstract ExternalInstall[] getExternalInstalls(C paramC);
/*     */
/*     */   protected List<InstallMetaData> getInstallMetaData(C annotation)
/*     */   {
/*  78 */     List installs = new ArrayList();
/*  79 */     for (ExternalInstall install : getExternalInstalls(annotation))
/*     */     {
/*  81 */       installs.add(createInstallMetaData(install));
/*     */     }
/*  83 */     return installs;
/*     */   }
/*     */
/*     */   protected InstallMetaData createInstallMetaData(ExternalInstall install)
/*     */   {
/*  94 */     AbstractInstallMetaData installMetaData = new AbstractInstallMetaData();
/*  95 */     installMetaData.setBean(install.bean());
/*  96 */     installMetaData.setMethodName(install.method());
/*  97 */     if (isAttributePresent(install.dependantState()))
/*  98 */       installMetaData.setDependentState(new ControllerState(install.dependantState()));
/*  99 */     for (Value value : install.parameters())
/*     */     {
/* 101 */       List parameters = installMetaData.getParameters();
/* 102 */       if (parameters == null)
/*     */       {
/* 104 */         parameters = new ArrayList();
/* 105 */         installMetaData.setParameters(parameters);
/*     */       }
/* 107 */       AbstractParameterMetaData parameter = new AbstractParameterMetaData(ValueUtil.createValueMetaData(value));
/* 108 */       if (isAttributePresent(value.type()))
/* 109 */         parameter.setType(value.type());
/* 110 */       parameters.add(parameter);
/*     */     }
/* 112 */     return installMetaData;
/*     */   }
/*     */
/*     */   protected List<? extends MetaDataVisitorNode> internalApplyAnnotation(ClassInfo info, C annotation, KernelControllerContext context) throws Throwable
/*     */   {
/* 117 */     BeanMetaData beanMetaData = context.getBeanMetaData();
/* 118 */     List existing = getExistingInstallMetaData(beanMetaData);
/* 119 */     if (existing == null) {
/* 120 */       throw new IllegalArgumentException("Must set empty Set to installs/uninstalls!");
/*     */     }
/* 122 */     List installs = getInstallMetaData(annotation);
/* 123 */     if ((installs != null) && (!installs.isEmpty()))
/*     */     {
/* 125 */       List nodes = new ArrayList();
/* 126 */       for (InstallMetaData install : installs)
/*     */       {
/* 128 */         boolean doAdd = true;
/* 129 */         for (InstallMetaData existingInstall : existing)
/*     */         {
/* 131 */           if (!isDifferent(install, existingInstall))
/*     */           {
/* 133 */             doAdd = false;
/* 134 */             break;
/*     */           }
/*     */         }
/* 137 */         if (doAdd)
/*     */         {
/* 139 */           existing.add(install);
/* 140 */           nodes.add(install);
/*     */         }
/*     */       }
/* 143 */       return nodes;
/*     */     }
/* 145 */     return null;
/*     */   }
/*     */
/*     */   protected static boolean isDifferent(InstallMetaData first, InstallMetaData second)
/*     */   {
/* 157 */     if (notEqual(first.getBean(), second.getBean())) {
/* 158 */       return true;
/*     */     }
/* 160 */     if (notEqual(first.getMethodName(), second.getMethodName())) {
/* 161 */       return true;
/*     */     }
/* 163 */     List fstParameters = first.getParameters();
/* 164 */     List sndParameters = second.getParameters();
/* 165 */     int fstSize = fstParameters != null ? fstParameters.size() : 0;
/* 166 */     int sndSize = sndParameters != null ? sndParameters.size() : 0;
/* 167 */     if (fstSize != sndSize) {
/* 168 */       return true;
/*     */     }
/* 170 */     for (int i = 0; i < fstSize; i++)
/*     */     {
/* 172 */       ParameterMetaData fstParameter = (ParameterMetaData)fstParameters.get(i);
/* 173 */       ParameterMetaData sndParameter = (ParameterMetaData)sndParameters.get(i);
/*     */
/* 175 */       if (notEqual(fstParameter.getType(), sndParameter.getType())) {
/* 176 */         return true;
/*     */       }
/* 178 */       ValueMetaData fstValue = fstParameter.getValue();
/* 179 */       ValueMetaData sndValue = sndParameter.getValue();
/* 180 */       Class fstClass = fstValue != null ? fstValue.getClass() : null;
/* 181 */       Class sndClass = sndValue != null ? sndValue.getClass() : null;
/*     */
/* 183 */       if (notEqual(fstClass, sndClass)) {
/* 184 */         return true;
/*     */       }
/* 186 */       Object fstObject = fstValue != null ? fstValue.getUnderlyingValue() : null;
/* 187 */       Object sndObject = sndValue != null ? sndValue.getUnderlyingValue() : null;
/*     */
/* 192 */       if ((fstObject != null) && (sndObject != null) && (notEqual(fstObject, sndObject))) {
/* 193 */         return true;
/*     */       }
/*     */     }
/* 196 */     return false;
/*     */   }
/*     */ }

/* Location:           /home/mnovotny/projects/EMBEDDED_JBOSS_BETA3_COMMUNITY/embedded/output/lib/embedded-jboss/lib/jboss-embedded-all.jar
* Qualified Name:     org.jboss.kernel.plugins.annotations.ExternalInstallationAnnotationPlugin
* JD-Core Version:    0.6.0
*/
TOP

Related Classes of org.jboss.kernel.plugins.annotations.ExternalInstallationAnnotationPlugin

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.