Author: scabanovich
Date: 2011-08-04 20:18:37 -0400 (Thu, 04 Aug 2011)
New Revision: 33614
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/persistence/
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/persistence/CDIPersistenceConstants.java
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/persistence/CDISeamPersistenceExtension.java
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/plugin.xml
Log:
JBIDE-9400
https://issues.jboss.org/browse/JBIDE-9400
Modified: trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/plugin.xml
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/plugin.xml 2011-08-05 00:14:24 UTC
(rev 33613)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/plugin.xml 2011-08-05 00:18:37 UTC
(rev 33614)
@@ -16,6 +16,10 @@
class="org.jboss.tools.cdi.seam.core.international.CDISeamInternationalExtension"
runtime="org.jboss.seam.international.status.TypedStatusMessageBundleExtension">
</cdiextension>
+ <cdiextension
+
class="org.jboss.tools.cdi.seam.core.persistence.CDISeamPersistenceExtension"
+
runtime="org.jboss.seam.persistence.ManagedPersistenceContextExtension">
+ </cdiextension>
</extension>
<extension
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/persistence/CDIPersistenceConstants.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/persistence/CDIPersistenceConstants.java
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/persistence/CDIPersistenceConstants.java 2011-08-05
00:18:37 UTC (rev 33614)
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * 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.core.persistence;
+
+/**
+ *
+ * @author Viacheslav Kabanlvich
+ *
+ */
+public interface CDIPersistenceConstants {
+ public String EXTENSION_MANAGED_ANNOTATION_TYPE_NAME =
"org.jboss.seam.solder.core.ExtensionManaged";
+
+ public String ENTITY_MANAGER_FACTORY_TYPE_NAME =
"javax.persistence.EntityManagerFactory";
+ public String ENTITY_MANAGER_TYPE_NAME = "javax.persistence.EntityManager";
+
+ public String SESSION_TYPE_NAME = "org.hibernate.Session";
+ public String SESSION_FACTORY_TYPE_NAME = "org.hibernate.SessionFactory";
+
+}
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/persistence/CDIPersistenceConstants.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/persistence/CDISeamPersistenceExtension.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/persistence/CDISeamPersistenceExtension.java
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/persistence/CDISeamPersistenceExtension.java 2011-08-05
00:18:37 UTC (rev 33614)
@@ -0,0 +1,179 @@
+/*******************************************************************************
+ * 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.core.persistence;
+
+import java.util.List;
+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.eclipse.jdt.core.JavaModelException;
+import org.jboss.tools.cdi.core.CDIConstants;
+import org.jboss.tools.cdi.core.CDICoreNature;
+import org.jboss.tools.cdi.core.IProducer;
+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.BeanMember;
+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.BeanMemberDefinition;
+import org.jboss.tools.cdi.internal.core.impl.definition.FieldDefinition;
+import org.jboss.tools.cdi.internal.core.impl.definition.MethodDefinition;
+import org.jboss.tools.cdi.internal.core.impl.definition.TypeDefinition;
+import org.jboss.tools.cdi.internal.core.scanner.FileSet;
+import org.jboss.tools.cdi.seam.core.CDISeamCorePlugin;
+import org.jboss.tools.common.java.ParametedType;
+import org.jboss.tools.common.java.TypeDeclaration;
+import org.jboss.tools.common.model.XModelObject;
+
+/**
+ *
+ * @author Viacheslav Kabanlvich
+ *
+ */
+public class CDISeamPersistenceExtension implements ICDIExtension,
IBuildParticipantFeature {
+ CDICoreNature project;
+ CDISeamPersistenceDefinitionContext context = new
CDISeamPersistenceDefinitionContext();
+
+ @Override
+ public void setProject(CDICoreNature n) {
+ project = n;
+ }
+
+ @Override
+ public IDefinitionContextExtension getContext() {
+ return context;
+ }
+
+ @Override
+ public void beginVisiting() {
+ }
+
+ @Override
+ public void visitJar(IPath path, IPackageFragmentRoot root,
+ XModelObject beansXML) {
+ }
+
+ @Override
+ public void visit(IFile file, IPath src, IPath webinf) {
+ }
+
+ @Override
+ public void buildDefinitions() {
+ }
+
+ @Override
+ public void buildDefinitions(FileSet fileSet) {
+ }
+
+ @Override
+ public void buildBeans() {
+ List<TypeDefinition> definitions = project.getAllTypeDefinitions();
+ if(definitions.isEmpty()) {
+ //no beans to build
+ return;
+ }
+ ParametedType entityManager =
getType(CDIPersistenceConstants.ENTITY_MANAGER_TYPE_NAME);
+ ParametedType entityManagerFactory =
getType(CDIPersistenceConstants.ENTITY_MANAGER_FACTORY_TYPE_NAME);
+ ParametedType session = getType(CDIPersistenceConstants.SESSION_TYPE_NAME);
+ ParametedType sessionFactory =
getType(CDIPersistenceConstants.SESSION_FACTORY_TYPE_NAME);
+ if(entityManager == null && session == null) {
+ return;
+ }
+
+ CDIProject cdi = (CDIProject)project.getDelegate();
+
+ for (TypeDefinition def: definitions) {
+ if(def.isVetoed() || !isArtifact(def)) {
+ continue;
+ }
+ ClassBean bean = new ClassBean();
+ bean.setParent(cdi);
+ bean.setDefinition(def);
+ Set<IProducer> ps = bean.getProducers();
+ for (IProducer p: ps) {
+ if(p.getAnnotation(CDIPersistenceConstants.EXTENSION_MANAGED_ANNOTATION_TYPE_NAME) !=
null) {
+ BeanMember m = (BeanMember)p;
+ TypeDeclaration d = m.getTypeDeclaration();
+
+ ParametedType substitute = null;
+ if(entityManagerFactory != null && entityManager != null &&
d.getType().equals(entityManagerFactory.getType())) {
+ substitute = entityManager;
+ } else if(sessionFactory != null && session != null &&
d.getType().equals(sessionFactory.getType())) {
+ substitute = session;
+ }
+
+ if(substitute != null) {
+ d = new TypeDeclaration(substitute, d.getResource(), d.getStartPosition(),
d.getLength());
+ m.setTypeDeclaration(d);
+ cdi.addBean(p);
+ }
+ }
+ }
+ }
+ }
+
+ boolean isArtifact(TypeDefinition typeDefinition) {
+ List<FieldDefinition> fs = typeDefinition.getFields();
+ for (FieldDefinition f: fs) {
+ if(isArtefact(f)) {
+ return true;
+ }
+ }
+ List<MethodDefinition> ms = typeDefinition.getMethods();
+ for (MethodDefinition m: ms) {
+ if(isArtefact(m)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ boolean isArtefact(BeanMemberDefinition m) {
+ return m.isAnnotationPresent(CDIConstants.PRODUCES_ANNOTATION_TYPE_NAME)
+ &&
m.isAnnotationPresent(CDIPersistenceConstants.EXTENSION_MANAGED_ANNOTATION_TYPE_NAME);
+ }
+
+ private ParametedType getType(String name) {
+ IType t = project.getType(name);
+ if(t == null) {
+ return null;
+ }
+ try {
+ return project.getTypeFactory().getParametedType(t, "L" + name +
";");
+ } catch (JavaModelException e) {
+ CDISeamCorePlugin.getDefault().logError(e);
+ return null;
+ }
+ }
+}
+
+class CDISeamPersistenceDefinitionContext extends AbstractDefinitionContextExtension {
+
+ public CDISeamPersistenceDefinitionContext() {}
+
+ @Override
+ protected AbstractDefinitionContextExtension copy(boolean clean) {
+ CDISeamPersistenceDefinitionContext copy = new CDISeamPersistenceDefinitionContext();
+ copy.root = root;
+ if(!clean) {
+ }
+ return copy;
+ }
+
+ protected void doApplyWorkingCopy() {
+ }
+}
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/persistence/CDISeamPersistenceExtension.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain