[jbosstools-commits] JBoss Tools SVN: r7131 - in trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam: internal/core and 1 other directories.
jbosstools-commits at lists.jboss.org
jbosstools-commits at lists.jboss.org
Wed Mar 26 14:39:31 EDT 2008
Author: scabanovich
Date: 2008-03-26 14:39:31 -0400 (Wed, 26 Mar 2008)
New Revision: 7131
Added:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/ISeamMessages.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamMessages.java
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/SeamCoreBuilder.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamProject.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamXMLConstants.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/lib/ClassScanner.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/lib/TypeScanner.java
Log:
JBIDE-1258
Added: trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/ISeamMessages.java
===================================================================
--- trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/ISeamMessages.java (rev 0)
+++ trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/ISeamMessages.java 2008-03-26 18:39:31 UTC (rev 7131)
@@ -0,0 +1,32 @@
+ /*******************************************************************************
+ * Copyright (c) 2007 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
+ *
+ * Contributor:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.seam.core;
+
+import java.util.Collection;
+
+/**
+ * @author Viacheslav Kabanovich
+ */
+public interface ISeamMessages extends ISeamAnnotatedFactory {
+
+ /**
+ *
+ * @return collection of keys in resource bundles
+ */
+ public Collection<String> getPropertyNames();
+
+ /**
+ *
+ * @return collection of properties declared in resource bundles
+ */
+ public Collection<ISeamProperty> getProperties();
+
+}
Modified: trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/SeamCoreBuilder.java
===================================================================
--- trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/SeamCoreBuilder.java 2008-03-26 16:31:16 UTC (rev 7130)
+++ trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/SeamCoreBuilder.java 2008-03-26 18:39:31 UTC (rev 7131)
@@ -12,6 +12,7 @@
import java.io.IOException;
import java.util.Map;
+import java.util.Set;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
@@ -22,6 +23,7 @@
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.osgi.util.NLS;
import org.jboss.tools.common.model.util.TypeInfoCollector;
+import org.jboss.tools.seam.internal.core.SeamMessages;
import org.jboss.tools.seam.internal.core.SeamProject;
import org.jboss.tools.seam.internal.core.SeamResourceVisitor;
import org.jboss.tools.seam.internal.core.scanner.IFileScanner;
@@ -116,10 +118,13 @@
} catch (IOException e) {
SeamCorePlugin.getPluginLog().logError(NLS.bind(SeamCoreMessages.SeamCoreBuilder_1,sp.getProject().getName()), e); //$NON-NLS-1$
}
+
+ sp.postBuild();
} finally {
sp.fireChanges();
- }
+ }
+
return null;
}
Added: trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamMessages.java
===================================================================
--- trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamMessages.java (rev 0)
+++ trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamMessages.java 2008-03-26 18:39:31 UTC (rev 7131)
@@ -0,0 +1,207 @@
+ /*******************************************************************************
+ * Copyright (c) 2007 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
+ *
+ * Contributor:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.seam.internal.core;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.jboss.tools.common.model.util.EclipseResourceUtil;
+import org.jboss.tools.seam.core.ISeamComponent;
+import org.jboss.tools.seam.core.ISeamElement;
+import org.jboss.tools.seam.core.ISeamMessages;
+import org.jboss.tools.seam.core.ISeamProject;
+import org.jboss.tools.seam.core.ISeamProperty;
+import org.jboss.tools.seam.core.ISeamXmlComponentDeclaration;
+import org.jboss.tools.seam.core.SeamCorePlugin;
+import org.jboss.tools.seam.core.event.Change;
+import org.jboss.tools.seam.core.event.ISeamValue;
+import org.jboss.tools.seam.core.event.ISeamValueList;
+import org.jboss.tools.seam.core.event.ISeamValueString;
+import org.w3c.dom.Element;
+
+/**
+ * @author Viacheslav Kabanovich
+ */
+public class SeamMessages extends SeamAnnotatedFactory implements ISeamMessages {
+ static Map<String, IResource> EMPTY = new HashMap<String, IResource>();
+ Map<String, IResource> resources = EMPTY;
+ Map<String, Long> timestamps = null;
+ Set<String> keys = null;
+
+ public SeamMessages() {}
+
+ public void revalidate() {
+ Map<String, IResource> resources2 = getResources();
+ if(changed(resources2)) {
+ timestamps = new HashMap<String, Long>();
+ for (String n : resources2.keySet()) {
+ IResource r = resources2.get(n);
+ timestamps.put(n, r.getLocalTimeStamp());
+ }
+ resources = resources2;
+ keys = null;
+ }
+ }
+
+ private boolean changed(Map<String, IResource> resources2) {
+ if(resources == resources2) return false;
+ if(resources2.size() != resources.size()) return true;
+ if(timestamps == null) return true;
+ for (String s: resources2.keySet()) {
+ IResource r2 = resources2.get(s);
+ IResource r1 = resources.get(s);
+ if(r1 == null || !r2.equals(r1)) return true;
+ long l1 = r1.getLocalTimeStamp();
+ long l2 = timestamps.get(s);
+ if(l1 != l2) return true;
+ }
+
+ return false;
+ }
+
+ private Map<String, IResource> getResources() {
+ ISeamProject p = getSeamProject();
+ if(p == null) return EMPTY;
+ IResource[] srcs = EclipseResourceUtil.getJavaSourceRoots(p.getProject());
+ ISeamComponent c = p.getComponent("org.jboss.seam.core.resourceLoader");
+ if(c == null) return EMPTY;
+ List<String> names = new ArrayList<String>();
+ Set<ISeamXmlComponentDeclaration> ds = c.getXmlDeclarations();
+ for (ISeamXmlComponentDeclaration d: ds) {
+ ISeamProperty property = d.getProperty("bundleNames");
+ if(property == null) continue;
+ ISeamValue v = property.getValue();
+ if(v == null) continue;
+ if(v instanceof ISeamValueList) {
+ List<ISeamValueString> vs = ((ISeamValueList)v).getValues();
+ for (ISeamValueString s: vs) {
+ if(s.getValue() == null) continue;
+ String b = s.getValue().getValue();
+ names.add(b);
+ }
+ }
+ }
+ if(ds.size() == 0) {
+ names.add("messages");
+ }
+ return getResources(names, srcs);
+ }
+
+ public Collection<ISeamProperty> getProperties() {
+ throw new RuntimeException("Not implemented");
+ }
+
+ public Collection<String> getPropertyNames() {
+ if(keys == null) {
+ keys = new HashSet<String>();
+ for (IResource r: resources.values()) {
+ IPath p = r.getLocation();
+ if(p == null) continue;
+ File f = p.toFile();
+ Properties properties = new Properties();
+ try {
+ properties.load(new FileInputStream(f));
+ } catch (IOException e) {
+ //ignore
+ //TODO keep error for validation
+ }
+ Set<?> s = properties.keySet();
+ for (Object o : s) keys.add((String)o);
+ }
+ }
+ return keys;
+ }
+
+ private Map<String, IResource> getResources(List<String> names, IResource[] srcs) {
+ Map<String, IResource> rs = new HashMap<String, IResource>();
+ for (String name: names) {
+ String n = name.replace('.', '/');
+ int k = n.lastIndexOf('/');
+ String p = k < 0 ? null : n.substring(0, k);
+ if(k >= 0) n = n.substring(k + 1);
+ IResource result = null;
+ for (int j = 0; j < srcs.length && result == null; j++) {
+ result = find(p, n, srcs[j]);
+ }
+ if(result != null) {
+ rs.put(name, result);
+ }
+ }
+ return rs;
+ }
+
+ private IResource find(String pack, String name, IResource src) {
+ if(!(src instanceof IContainer)) return null;
+ IContainer c = (IContainer)src;
+ if(pack != null) {
+ c = c.getFolder(new Path(pack));
+ }
+ if(c == null || !c.exists()) return null;
+ String suffix = ".properties";
+ String name_ = name + "_";
+ String name_p = name + suffix;
+ IResource result = null;
+ try {
+ IResource[] rs = c.members();
+ for (int i = 0; i < rs.length; i++) {
+ String n = rs[i].getName();
+ if(name_p.equals(n)) return rs[i];
+ if(result == null && n.startsWith(name_) && n.endsWith(suffix)) {
+ result = rs[i];
+ }
+ }
+ } catch (CoreException e) {
+ SeamCorePlugin.getPluginLog().logError(e);
+ }
+
+ return result;
+ }
+
+ public SeamMessages clone() throws CloneNotSupportedException {
+ SeamMessages c = (SeamMessages)super.clone();
+ return c;
+ }
+
+ public void loadXML(Element element, Properties context) {
+ super.loadXML(element, context);
+
+ }
+
+ public List<Change> merge(ISeamElement s) {
+ List<Change> changes = super.merge(s);
+ keys = null;
+ return changes;
+ }
+
+ public String getXMLClass() {
+ return SeamXMLConstants.CLS_MESSAGES;
+ }
+
+ public Element toXML(Element parent, Properties context) {
+ Element e = super.toXML(parent, context);
+ return e;
+ }
+
+}
Modified: trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamProject.java
===================================================================
--- trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamProject.java 2008-03-26 16:31:16 UTC (rev 7130)
+++ trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamProject.java 2008-03-26 18:39:31 UTC (rev 7131)
@@ -623,6 +623,8 @@
d = new SeamXmlFactory();
} else if(SeamXMLConstants.CLS_JAVA.equals(cls)) {
d = new SeamAnnotatedFactory();
+ } else if(SeamXMLConstants.CLS_MESSAGES.equals(cls)) {
+ d = new SeamMessages();
}
if(d == null) continue;
d.loadXML(cs[j], context);
@@ -647,6 +649,7 @@
statistics.add(new Long(t2 - t1));
}
}
+ postBuild();
}
/*
@@ -857,6 +860,10 @@
for (int i = 0; i < factories.length; i++) {
AbstractContextVariable loaded = (AbstractContextVariable)factories[i];
AbstractContextVariable current = (AbstractContextVariable)currentFactories.remove(loaded.getId());
+ if(current != null && current.getClass() != loaded.getClass()) {
+ this.factories.removeFactory((ISeamFactory)current);
+ current = null;
+ }
if(current != null) {
List<Change> changes = current.merge(loaded);
fireChanges(changes);
@@ -1539,6 +1546,17 @@
return map;
}
+ public void postBuild() {
+ Set<ISeamFactory> fff = getFactoriesByName("org.jboss.seam.international.messages");
+ if(fff.size() > 0) {
+ ISeamFactory m = fff.iterator().next();
+ if(m instanceof SeamMessages) {
+ SeamMessages sm = (SeamMessages)m;
+ sm.revalidate();
+ }
+ }
+ }
+
/**
*
* @param builderID
Modified: trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamXMLConstants.java
===================================================================
--- trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamXMLConstants.java 2008-03-26 16:31:16 UTC (rev 7130)
+++ trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamXMLConstants.java 2008-03-26 18:39:31 UTC (rev 7131)
@@ -23,6 +23,7 @@
public String CLS_PROPERTIES = "properties";
public String CLS_JAVA = "java";
+ public String CLS_MESSAGES = "messages";
public String CLS_MAP = "map";
public String CLS_LIST = "list";
Modified: trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/lib/ClassScanner.java
===================================================================
--- trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/lib/ClassScanner.java 2008-03-26 16:31:16 UTC (rev 7130)
+++ trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/lib/ClassScanner.java 2008-03-26 18:39:31 UTC (rev 7131)
@@ -30,6 +30,7 @@
import org.jboss.tools.seam.internal.core.BijectedAttribute;
import org.jboss.tools.seam.internal.core.SeamAnnotatedFactory;
import org.jboss.tools.seam.internal.core.SeamJavaComponentDeclaration;
+import org.jboss.tools.seam.internal.core.SeamMessages;
import org.jboss.tools.seam.internal.core.scanner.LoadedDeclarations;
import org.jboss.tools.seam.internal.core.scanner.Util;
import org.jboss.tools.seam.internal.core.scanner.java.SeamAnnotations;
@@ -184,7 +185,10 @@
if(name == null || name.length() == 0) {
name = m.getName();
}
- SeamAnnotatedFactory factory = new SeamAnnotatedFactory();
+ SeamAnnotatedFactory factory =
+ ("org.jboss.seam.international.messages".equals(name) && m.getName().equals("getMessages"))
+ ? new SeamMessages()
+ : new SeamAnnotatedFactory();
factory.setParentDeclaration(component);
ds.getFactories().add(factory);
IMethod im = findIMethod(component, m);
Modified: trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/lib/TypeScanner.java
===================================================================
--- trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/lib/TypeScanner.java 2008-03-26 16:31:16 UTC (rev 7130)
+++ trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/lib/TypeScanner.java 2008-03-26 18:39:31 UTC (rev 7131)
@@ -42,6 +42,7 @@
import org.jboss.tools.seam.internal.core.SeamAnnotatedFactory;
import org.jboss.tools.seam.internal.core.SeamComponentMethod;
import org.jboss.tools.seam.internal.core.SeamJavaComponentDeclaration;
+import org.jboss.tools.seam.internal.core.SeamMessages;
import org.jboss.tools.seam.internal.core.scanner.LoadedDeclarations;
import org.jboss.tools.seam.internal.core.scanner.Util;
import org.jboss.tools.seam.internal.core.scanner.java.SeamAnnotations;
@@ -205,7 +206,10 @@
if(name == null || name.length() == 0) {
name = new String(m.getSelector());
}
- SeamAnnotatedFactory factory = new SeamAnnotatedFactory();
+ SeamAnnotatedFactory factory =
+ ("org.jboss.seam.international.messages".equals(name) && new String(m.getSelector()).equals("getMessages"))
+ ? new SeamMessages()
+ : new SeamAnnotatedFactory();
factory.setParentDeclaration(component);
factory.setSourcePath(component.getSourcePath());
ds.getFactories().add(factory);
More information about the jbosstools-commits
mailing list