Author: scabanovich
Date: 2011-07-22 20:37:36 -0400 (Fri, 22 Jul 2011)
New Revision: 33152
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/CDISeamInternationalDefinitionContext.java
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/CDISeamInternationalExtension.java
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/IBundle.java
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/IBundleModel.java
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/impl/
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/impl/BundleImpl.java
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/impl/BundleModel.java
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/scanner/
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/scanner/BundleFileSet.java
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/plugin.xml
Log:
JBIDE-9395
https://issues.jboss.org/browse/JBIDE-9395
Modified: trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/plugin.xml
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/plugin.xml 2011-07-23 00:37:10 UTC
(rev 33151)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/plugin.xml 2011-07-23 00:37:36 UTC
(rev 33152)
@@ -10,4 +10,11 @@
</el-resolver>
</extension>
+ <extension
+ point="org.jboss.tools.cdi.core.cdiextensions">
+ <cdiextension
+
class="org.jboss.tools.cdi.seam.core.international.CDISeamInternationalExtension"
+
runtime="org.jboss.seam.international.status.TypedStatusMessageBundleExtension">
+ </cdiextension>
+ </extension>
</plugin>
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/CDISeamInternationalDefinitionContext.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/CDISeamInternationalDefinitionContext.java
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/CDISeamInternationalDefinitionContext.java 2011-07-23
00:37:36 UTC (rev 33152)
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * 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.international;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IPath;
+import org.jboss.tools.cdi.core.extension.AbstractDefinitionContextExtension;
+import org.jboss.tools.cdi.seam.core.international.scanner.BundleFileSet;
+import org.jboss.tools.common.model.XModelObject;
+
+/**
+ *
+ * @author Viacheslav Kabanovich
+ *
+ */
+public class CDISeamInternationalDefinitionContext extends
AbstractDefinitionContextExtension {
+ private Map<IPath, Set<XModelObject>> bundles = new HashMap<IPath,
Set<XModelObject>>();
+ private Set<XModelObject> allBundles = new HashSet<XModelObject>();
+
+ public CDISeamInternationalDefinitionContext() {}
+
+ @Override
+ protected AbstractDefinitionContextExtension copy(boolean clean) {
+ CDISeamInternationalDefinitionContext copy = new
CDISeamInternationalDefinitionContext();
+ copy.root = root;
+ if(!clean) {
+ copy.bundles.putAll(bundles);
+ }
+ return copy;
+ }
+
+ protected void doApplyWorkingCopy() {
+ CDISeamInternationalDefinitionContext copy =
(CDISeamInternationalDefinitionContext)workingCopy;
+ bundles = copy.bundles;
+ allBundles = copy.allBundles;
+ }
+
+ public void clean() {
+ synchronized(bundles) {
+ bundles.clear();
+ }
+ synchronized (allBundles) {
+ allBundles.clear();
+ }
+ }
+
+ public void clean(IPath path) {
+ Set<XModelObject> bs = null;
+ synchronized(bundles) {
+ bs = bundles.remove(path);
+ }
+ if(bs != null) {
+ synchronized (allBundles) {
+ allBundles.removeAll(bs);
+ }
+ }
+ }
+
+ public void addDefinitions(BundleFileSet fileSet) {
+ for (IPath path: fileSet.getAllPaths()) {
+ Set<XModelObject> bs = fileSet.getBundles(path);
+ synchronized(bundles) {
+ bundles.put(path, bs);
+ }
+ synchronized (allBundles) {
+ allBundles.addAll(bs);
+ }
+ }
+ }
+
+ public Set<XModelObject> getAllBundles() {
+ return allBundles;
+ }
+
+}
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/CDISeamInternationalDefinitionContext.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/CDISeamInternationalExtension.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/CDISeamInternationalExtension.java
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/CDISeamInternationalExtension.java 2011-07-23
00:37:36 UTC (rev 33152)
@@ -0,0 +1,137 @@
+/*******************************************************************************
+ * 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.international;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.jboss.tools.cdi.core.CDICoreNature;
+import org.jboss.tools.cdi.core.extension.ICDIExtension;
+import org.jboss.tools.cdi.core.extension.feature.IBuildParticipant2Feature;
+import org.jboss.tools.cdi.core.extension.feature.IBuildParticipantFeature;
+import org.jboss.tools.cdi.internal.core.scanner.FileSet;
+import org.jboss.tools.cdi.seam.core.international.impl.BundleModel;
+import org.jboss.tools.cdi.seam.core.international.scanner.BundleFileSet;
+import org.jboss.tools.common.model.XModelObject;
+import org.jboss.tools.common.model.util.EclipseResourceUtil;
+
+/**
+ *
+ * @author Viacheslav Kabanlvich
+ *
+ */
+public class CDISeamInternationalExtension implements ICDIExtension,
IBuildParticipant2Feature {
+ CDICoreNature project;
+ CDISeamInternationalDefinitionContext context = new
CDISeamInternationalDefinitionContext();
+ BundleFileSet fileSet = new BundleFileSet();
+
+ BundleModel model = new BundleModel();
+
+ public static CDISeamInternationalExtension getExtension(CDICoreNature project) {
+ Set<ICDIExtension> es =
project.getExtensionManager().getExtensions(IBuildParticipantFeature.class);
+ for (ICDIExtension ext: es) {
+ if(ext instanceof CDISeamInternationalExtension) return
(CDISeamInternationalExtension)ext;
+ }
+ return null;
+ }
+
+ public void setProject(CDICoreNature n) {
+ project = n;
+ }
+
+ public BundleModel getBundleModel() {
+ return model;
+ }
+
+ public CDISeamInternationalDefinitionContext getContext() {
+ return context;
+ }
+
+ public void beginVisiting() {
+ fileSet = new BundleFileSet();
+ }
+
+ public void visit(IFile file, IPath src, IPath webinf) {
+ IPath path = file.getFullPath();
+ if(src != null && src.isPrefixOf(path)) {
+ addBundle(file, fileSet);
+ }
+ }
+
+ private void addBundle(IFile f, BundleFileSet fileSet) {
+ if(f.getName().endsWith(".properties")) {
+ XModelObject b = getObject(f);
+ if(b != null) {
+ fileSet.setBundle(f.getFullPath(), b);
+ }
+ }
+ }
+
+ private XModelObject getObject(IFile f) {
+ XModelObject o = EclipseResourceUtil.getObjectByResource(f);
+ if(o == null) {
+ o = EclipseResourceUtil.createObjectForResource(f);
+ }
+ return o;
+ }
+
+ @Override
+ public void visitJar(IPath path, IPackageFragmentRoot root, XModelObject beansXML) {
+ }
+
+ @Override
+ public void buildDefinitions() {
+ ((CDISeamInternationalDefinitionContext)context.getWorkingCopy()).addDefinitions(fileSet);
+ }
+
+ @Override
+ public void buildDefinitions(FileSet fileSet) {
+ }
+
+ @Override
+ public void buildBeans() {
+ model.rebuild(context.getAllBundles());
+ }
+
+ @Override
+ public void visitJar(IPath path, XModelObject fs) {
+ Set<XModelObject> objects = collectXModelBundleObjects(fs, null);
+ fileSet.setBundles(path, objects);
+ }
+
+ private Set<XModelObject> collectXModelBundleObjects(XModelObject o,
Set<XModelObject> objects) {
+ if(objects == null) {
+ objects = new HashSet<XModelObject>();
+ }
+ if (o == null) return objects;
+
+ String path = o.getPath();
+ if (path == null ||
"META-INF".equalsIgnoreCase(o.getAttributeValue("name")))
+ return objects;
+
+ if (path.endsWith(".properties")) {
+ objects.add(o);
+ }
+
+ if (o.getFileType() > XModelObject.FILE && o.hasChildren()) {
+ XModelObject[] children = o.getChildren();
+ if (children != null) {
+ for (XModelObject c : children) {
+ collectXModelBundleObjects(c, objects);
+ }
+ }
+ }
+ return objects;
+ }
+}
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/CDISeamInternationalExtension.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/IBundle.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/IBundle.java
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/IBundle.java 2011-07-23
00:37:36 UTC (rev 33152)
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * 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.international;
+
+import java.util.Set;
+
+/**
+ *
+ * @author Viacheslav Kabanovich
+ *
+ */
+public interface IBundle {
+
+ public String getName();
+
+ public Set<String> getPropertyNames();
+
+}
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/IBundle.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/IBundleModel.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/IBundleModel.java
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/IBundleModel.java 2011-07-23
00:37:36 UTC (rev 33152)
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * 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.international;
+
+/**
+ *
+ * @author Viacheslav Kabanovich
+ *
+ */
+public interface IBundleModel {
+ public IBundle getBundle(String banename);
+}
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/IBundleModel.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/impl/BundleImpl.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/impl/BundleImpl.java
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/impl/BundleImpl.java 2011-07-23
00:37:36 UTC (rev 33152)
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * 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.international.impl;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.jboss.tools.cdi.seam.core.international.IBundle;
+import org.jboss.tools.common.model.XModelObject;
+
+public class BundleImpl implements IBundle {
+ String name = "";
+ Set<XModelObject> objects = new HashSet<XModelObject>();
+
+ public BundleImpl() {}
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String s) {
+ name = s;
+ }
+
+ public Set<String> getPropertyNames() {
+ Set<String> result = new HashSet<String>();
+ for (XModelObject o: objects) {
+ XModelObject[] os = o.getChildren();
+ for (XModelObject p: os) {
+ result.add(p.getAttributeValue("name"));
+ }
+ }
+ return result;
+ }
+
+ public void addObject(XModelObject o) {
+ objects.add(o);
+ }
+
+}
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/impl/BundleImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/impl/BundleModel.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/impl/BundleModel.java
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/impl/BundleModel.java 2011-07-23
00:37:36 UTC (rev 33152)
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * 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.international.impl;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.jboss.tools.cdi.seam.core.international.IBundleModel;
+import org.jboss.tools.common.model.XModelObject;
+
+public class BundleModel implements IBundleModel {
+ long timeStamp = 0;
+ Map<String, BundleImpl> bundles = new HashMap<String, BundleImpl>();
+
+ public BundleImpl getBundle(String name) {
+ return bundles.get(name);
+ }
+
+ public void rebuild(Set<XModelObject> objects) {
+ long t = computeTimeStamp(objects);
+ if(t == timeStamp) return;
+ timeStamp = t;
+ bundles.clear();
+ for (XModelObject o: objects) {
+ addToBundle(getBundleName(o), o);
+ }
+ }
+
+ private BundleImpl addToBundle(String name, XModelObject o) {
+ BundleImpl b = getBundle(name);
+ if(b == null) {
+ b = new BundleImpl();
+ b.setName(name);
+ }
+ b.addObject(o);
+ return b;
+ }
+
+ private String getBundleName(XModelObject o) {
+ IPath p = new Path(o.getPath());
+ p = p.removeFirstSegments(2);
+ String n = p.toString();
+ n = n.substring(0, n.lastIndexOf('.'));
+ if (n.indexOf('_') != -1)
+ n = n.substring(0, n.indexOf('_'));
+ return n.replace('/', '.');
+ }
+
+ long computeTimeStamp(Set<XModelObject> objects) {
+ long t = 0;
+ for (XModelObject o: objects) {
+ t += o.hashCode() + 713 * o.getTimeStamp();
+ }
+ return t;
+ }
+
+}
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/impl/BundleModel.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/scanner/BundleFileSet.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/scanner/BundleFileSet.java
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/scanner/BundleFileSet.java 2011-07-23
00:37:36 UTC (rev 33152)
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * 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.international.scanner;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IPath;
+import org.jboss.tools.common.model.XModelObject;
+
+/**
+ *
+ * @author Viacheslav Kabanovich
+ *
+ */
+public class BundleFileSet {
+ private Set<IPath> allpaths = new HashSet<IPath>();
+ private Map<IPath, Set<XModelObject>> bundles = new HashMap<IPath,
Set<XModelObject>>();
+
+ public BundleFileSet() {}
+
+ public Set<IPath> getAllPaths() {
+ return allpaths;
+ }
+
+ public Set<XModelObject> getBundles(IPath f) {
+ return bundles.get(f);
+ }
+
+ public void setBundle(IPath f, XModelObject o) {
+ Set<XModelObject> set = bundles.get(f);
+ if(set == null) {
+ set = new HashSet<XModelObject>();
+ bundles.put(f, set);
+ }
+ set.add(o);
+ allpaths.add(f);
+ }
+
+ public void setBundles(IPath f, Set<XModelObject> set) {
+ bundles.put(f, set);
+ allpaths.add(f);
+ }
+
+}
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.core/src/org/jboss/tools/cdi/seam/core/international/scanner/BundleFileSet.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain