[jbosstools-commits] JBoss Tools SVN: r30543 - in trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core: src/org/jboss/tools/cdi/seam/solder/core and 1 other directory.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Tue Apr 12 19:54:50 EDT 2011


Author: scabanovich
Date: 2011-04-12 19:54:50 -0400 (Tue, 12 Apr 2011)
New Revision: 30543

Added:
   trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderServiceHandlerExtension.java
Modified:
   trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/plugin.xml
   trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderConstants.java
   trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderLoggerExtension.java
Log:
JBIDE-8717
https://issues.jboss.org/browse/JBIDE-8717

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/plugin.xml
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/plugin.xml	2011-04-12 23:53:00 UTC (rev 30542)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/plugin.xml	2011-04-12 23:54:50 UTC (rev 30543)
@@ -11,5 +11,10 @@
           class="org.jboss.tools.cdi.seam.solder.core.CDISeamSolderLoggerExtension"
           runtime="org.jboss.seam.solder.logging.TypedMessageLoggerExtension">
     </cdiextension>
+    
+    <cdiextension
+          class="org.jboss.tools.cdi.seam.solder.core.CDISeamSolderServiceHandlerExtension"
+          runtime="org.jboss.seam.solder.serviceHandler.ServiceHandlerExtension">
+    </cdiextension>
 	</extension>
 </plugin>

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderConstants.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderConstants.java	2011-04-12 23:53:00 UTC (rev 30542)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderConstants.java	2011-04-12 23:54:50 UTC (rev 30543)
@@ -11,4 +11,7 @@
 	public String MESSAGE_LOGGER_ANNOTATION_TYPE_NAME = "org.jboss.seam.solder.logging.MessageLogger";
 	public String MESSAGE_BUNDLE_ANNOTATION_TYPE_NAME = "org.jboss.seam.solder.messages.MessageBundle";
 
+	public String SERVICE_HANDLER_TYPE_ANNOTATION_TYPE_NAME = "org.jboss.seam.solder.serviceHandler.ServiceHandlerType";
+	public String SERVICE_ANNOTATION_KIND = "serviceAnnotation";
+
 }

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderLoggerExtension.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderLoggerExtension.java	2011-04-12 23:53:00 UTC (rev 30542)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderLoggerExtension.java	2011-04-12 23:54:50 UTC (rev 30543)
@@ -1,3 +1,13 @@
+/******************************************************************************* 
+ * Copyright (c) 2011 Red Hat, Inc. 
+ * Distributed under license by Red Hat, Inc. All rights reserved. 
+ * This program is made available under the terms of the 
+ * Eclipse Public License v1.0 which accompanies this distribution, 
+ * and is available at http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Red Hat, Inc. - initial API and implementation 
+ ******************************************************************************/
 package org.jboss.tools.cdi.seam.solder.core;
 
 import java.util.HashMap;
@@ -10,8 +20,7 @@
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.SourceRange;
 import org.jboss.tools.cdi.core.CDICoreNature;
-import org.jboss.tools.cdi.core.IAnnotationDeclaration;
-import org.jboss.tools.cdi.core.IRootDefinitionContext;
+import org.jboss.tools.cdi.core.extension.AbstractDefinitionContextExtension;
 import org.jboss.tools.cdi.core.extension.ICDIExtension;
 import org.jboss.tools.cdi.core.extension.IDefinitionContextExtension;
 import org.jboss.tools.cdi.core.extension.feature.IBuildParticipantFeature;
@@ -24,6 +33,11 @@
 import org.jboss.tools.cdi.internal.core.scanner.FileSet;
 import org.jboss.tools.common.model.XModelObject;
 
+/**
+ * 
+ * @author Viacheslav Kabanovich
+ *
+ */
 public class CDISeamSolderLoggerExtension implements ICDIExtension, IBuildParticipantFeature {
 	CDICoreNature project;
 	LoggerDefinitionContext context = new LoggerDefinitionContext();
@@ -53,7 +67,7 @@
 	}
 
 	public void buildDefinitions(FileSet fileSet) {
-		LoggerDefinitionContext workingCopy = context.getWorkingCopy();
+		LoggerDefinitionContext workingCopy = (LoggerDefinitionContext)context.getWorkingCopy();
 		
 		Map<IPath, Set<IType>> is = fileSet.getInterfaces();
 		for (IPath path: is.keySet()) {
@@ -86,7 +100,7 @@
 
 	public void buildBeans() {
 		CDIProject p = ((CDIProject)project.getDelegate());
-		Map<IPath, TypeDefinition> loggers = context.getMessageLoggers();
+		Map<String, TypeDefinition> loggers = context.getMessageLoggers();
 		for (TypeDefinition d: loggers.values()) {
 			ClassBean b = new ClassBean();
 			b.setDefinition(d);
@@ -94,7 +108,7 @@
 			p.addBean(b);
 		}
 
-		Map<IPath, TypeDefinition> bundles = context.getMessageBundles();
+		Map<String, TypeDefinition> bundles = context.getMessageBundles();
 		for (TypeDefinition d: bundles.values()) {
 			ClassBean b = new ClassBean();
 			b.setDefinition(d);
@@ -104,16 +118,12 @@
 
 	}
 
-	class LoggerDefinitionContext implements IDefinitionContextExtension {
-		IRootDefinitionContext root;
-
-		Map<IPath, TypeDefinition> messageLoggers = new HashMap<IPath, TypeDefinition>();
-		Map<IPath, TypeDefinition> messageBundles = new HashMap<IPath, TypeDefinition>();
+	class LoggerDefinitionContext extends AbstractDefinitionContextExtension {
+		Map<String, TypeDefinition> messageLoggers = new HashMap<String, TypeDefinition>();
+		Map<String, TypeDefinition> messageBundles = new HashMap<String, TypeDefinition>();
 	
-		LoggerDefinitionContext original;
-		LoggerDefinitionContext workingCopy;
 
-		private LoggerDefinitionContext copy(boolean clean) {
+		protected LoggerDefinitionContext copy(boolean clean) {
 			LoggerDefinitionContext copy = new LoggerDefinitionContext();
 			copy.root = root;
 			if(!clean) {
@@ -124,71 +134,41 @@
 			return copy;
 		}
 
-		public void newWorkingCopy(boolean forFullBuild) {
-			if(original != null) return;
-			workingCopy = copy(forFullBuild);
-			workingCopy.original = this;
+		protected void doApplyWorkingCopy() {
+			messageLoggers = ((LoggerDefinitionContext)workingCopy).messageLoggers;
+			messageBundles = ((LoggerDefinitionContext)workingCopy).messageBundles;
 		}
 
-		public void applyWorkingCopy() {
-			if(original != null) {
-				original.applyWorkingCopy();
-				return;
-			}
-			if(workingCopy == null) {
-				return;
-			}
-			messageLoggers = workingCopy.messageLoggers;
-			messageBundles = workingCopy.messageBundles;
-			
-			workingCopy = null;
-		}
-
 		public void clean() {
 			messageLoggers.clear();
 			messageBundles.clear();			
 		}
 
 		public void clean(IPath path) {
-			messageLoggers.remove(path);
-			messageBundles.remove(path);
 		}
 
-		public void setRootContext(IRootDefinitionContext context) {
-			root = context;
+		public void clean(String typeName) {
+			messageLoggers.remove(typeName);
+			messageBundles.remove(typeName);
 		}
 
-		public IRootDefinitionContext getRootContext() {
-			return root;
-		}
-
-		public LoggerDefinitionContext getWorkingCopy() {
-			if(original != null) {
-				return this;
-			}
-			if(workingCopy != null) {
-				return workingCopy;
-			}
-			workingCopy = copy(false);
-			workingCopy.original = this;
-			return workingCopy;
-		}
-	
 		public void addMessageLogger(IPath path, TypeDefinition def) {
-			messageLoggers.put(path, def);
-			root.addToParents(path);
+			String typeName = def.getType().getFullyQualifiedName();
+			messageLoggers.put(typeName, def);
+			root.addType(path, typeName);
 		}
 		
 		public void addMessageBundle(IPath path, TypeDefinition def) {
-			messageBundles.put(path, def);
-			root.addToParents(path);
+			String typeName = def.getType().getFullyQualifiedName();
+			messageBundles.put(typeName, def);
+			root.addType(path, typeName);
 		}
 	
-		public Map<IPath, TypeDefinition> getMessageLoggers() {
+		public Map<String, TypeDefinition> getMessageLoggers() {
 			return messageLoggers;
 		}
 		
-		public Map<IPath, TypeDefinition> getMessageBundles() {
+		public Map<String, TypeDefinition> getMessageBundles() {
 			return messageBundles;
 		}
 		

Added: trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderServiceHandlerExtension.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderServiceHandlerExtension.java	                        (rev 0)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderServiceHandlerExtension.java	2011-04-12 23:54:50 UTC (rev 30543)
@@ -0,0 +1,163 @@
+/******************************************************************************* 
+ * Copyright (c) 2011 Red Hat, Inc. 
+ * Distributed under license by Red Hat, Inc. All rights reserved. 
+ * This program is made available under the terms of the 
+ * Eclipse Public License v1.0 which accompanies this distribution, 
+ * and is available at http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Red Hat, Inc. - initial API and implementation 
+ ******************************************************************************/
+package org.jboss.tools.cdi.seam.solder.core;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.eclipse.jdt.core.IType;
+import org.jboss.tools.cdi.core.CDICoreNature;
+import org.jboss.tools.cdi.core.IAnnotationDeclaration;
+import org.jboss.tools.cdi.core.extension.AbstractDefinitionContextExtension;
+import org.jboss.tools.cdi.core.extension.ICDIExtension;
+import org.jboss.tools.cdi.core.extension.IDefinitionContextExtension;
+import org.jboss.tools.cdi.core.extension.feature.IBuildParticipantFeature;
+import org.jboss.tools.cdi.internal.core.impl.CDIProject;
+import org.jboss.tools.cdi.internal.core.impl.ClassBean;
+import org.jboss.tools.cdi.internal.core.impl.definition.AbstractMemberDefinition;
+import org.jboss.tools.cdi.internal.core.impl.definition.AnnotationDefinition;
+import org.jboss.tools.cdi.internal.core.impl.definition.TypeDefinition;
+import org.jboss.tools.cdi.internal.core.scanner.FileSet;
+import org.jboss.tools.common.model.XModelObject;
+
+/**
+ * 
+ * @author Viacheslav Kabanovich
+ *
+ */
+public class CDISeamSolderServiceHandlerExtension implements ICDIExtension, IBuildParticipantFeature {
+	CDICoreNature project;
+	ServiceHandlerDefinitionContext context = new ServiceHandlerDefinitionContext();
+
+	public Object getAdapter(Class adapter) {
+		return null;
+	}
+
+	public void setProject(CDICoreNature n) {
+		project = n;
+	}
+
+	public IDefinitionContextExtension getContext() {
+		return context;
+	}
+
+	public void beginVisiting() {
+	}
+
+	public void visitJar(IPath path, IPackageFragmentRoot root, XModelObject beansXML) {
+	}
+
+	public void visit(IFile file, IPath src, IPath webinf) {
+	}
+
+	public void buildDefinitions() {
+	}
+
+	public void buildDefinitions(FileSet fileSet) {
+		ServiceHandlerDefinitionContext workingCopy = (ServiceHandlerDefinitionContext)context.getWorkingCopy();
+		
+		Map<IPath, Set<IType>> is = fileSet.getInterfaces();
+		for (IPath path: is.keySet()) {
+			Set<IType> ts = is.get(path);
+			for (IType t: ts) {
+				InterfaceDefinition i = new InterfaceDefinition(t);
+				List<IAnnotationDeclaration> as = i.getAnnotations();
+				for (IAnnotationDeclaration a: as) {
+					if(workingCopy.isServiceAnnotation(a.getType())) {
+						TypeDefinition d = new TypeDefinition();
+						d.setType(t, workingCopy.getRootContext());
+						workingCopy.addService(path, d);
+					}
+				}
+			}
+		}
+	}
+
+	public void buildBeans() {
+		CDIProject p = ((CDIProject)project.getDelegate());
+		Map<String, TypeDefinition> services = context.getServices();
+		for (TypeDefinition d: services.values()) {
+			ClassBean b = new ClassBean();
+			b.setDefinition(d);
+			b.setParent(p);
+			p.addBean(b);
+		}
+
+	}
+
+	class ServiceHandlerDefinitionContext extends AbstractDefinitionContextExtension {
+		Set<String> serviceAnnotations = new HashSet<String>();
+		Map<String, TypeDefinition> services = new HashMap<String, TypeDefinition>();
+	
+
+		protected ServiceHandlerDefinitionContext copy(boolean clean) {
+			ServiceHandlerDefinitionContext copy = new ServiceHandlerDefinitionContext();
+			copy.root = root;
+			if(!clean) {
+				copy.services.putAll(services);
+				copy.serviceAnnotations.addAll(serviceAnnotations);
+			}
+
+			return copy;
+		}
+
+		protected void doApplyWorkingCopy() {
+			services = ((ServiceHandlerDefinitionContext)workingCopy).services;
+			serviceAnnotations = ((ServiceHandlerDefinitionContext)workingCopy).serviceAnnotations;
+		}
+		
+
+		public void clean() {
+			services.clear();
+			serviceAnnotations.clear();
+		}
+
+		public void clean(String typeName) {
+			services.remove(typeName);
+			serviceAnnotations.remove(typeName);
+		}
+
+		public void addService(IPath path, TypeDefinition def) {
+			String typeName = def.getType().getFullyQualifiedName();
+			services.put(typeName, def);
+			root.addType(path, typeName);
+		}
+		
+		public Map<String, TypeDefinition> getServices() {
+			return services;
+		}
+		
+		public void computeAnnotationKind(AnnotationDefinition annotation) {
+			if(annotation.isAnnotationPresent(CDISeamSolderConstants.SERVICE_HANDLER_TYPE_ANNOTATION_TYPE_NAME)) {
+				annotation.setExtendedKind(CDISeamSolderConstants.SERVICE_ANNOTATION_KIND);
+				serviceAnnotations.add(annotation.getType().getFullyQualifiedName());
+			}
+		}
+	
+		public boolean isServiceAnnotation(IType type) {
+			return (type != null && serviceAnnotations.contains(type.getFullyQualifiedName()));
+		}
+
+	}
+
+	class InterfaceDefinition extends AbstractMemberDefinition {
+		InterfaceDefinition(IType type) {
+			setAnnotatable(type, type, context.getRootContext());
+		}
+	}
+
+}


Property changes on: trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderServiceHandlerExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain



More information about the jbosstools-commits mailing list