geronimo-scm mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From pmcma...@apache.org
Subject svn commit: r520023 [2/10] - in /geronimo/sandbox/j2g: ./ bin/ doc/ src/ src/common/ src/common/META-INF/ src/common/src/ src/common/src/org/ src/common/src/org/apache/ src/common/src/org/apache/apps/ src/common/src/org/apache/apps/j2gmigrator/ src/con...
Date Mon, 19 Mar 2007 17:43:49 GMT
Added: geronimo/sandbox/j2g/src/common/src/org/apache/apps/j2gmigrator/XMLMigrationTool.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/j2g/src/common/src/org/apache/apps/j2gmigrator/XMLMigrationTool.java?view=auto&rev=520023
==============================================================================
--- geronimo/sandbox/j2g/src/common/src/org/apache/apps/j2gmigrator/XMLMigrationTool.java (added)
+++ geronimo/sandbox/j2g/src/common/src/org/apache/apps/j2gmigrator/XMLMigrationTool.java Mon Mar 19 10:43:27 2007
@@ -0,0 +1,182 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.apps.j2gmigrator;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.ILog;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+
+/**
+ * Base class for descriptors and resources migration tool.
+ * 
+ * @author Ivan S. Dubrov
+ */
+public abstract class XMLMigrationTool extends Tool {
+	
+	/** XML suffix */
+	public final static String XML_SUFFIX = ".xml";
+
+	/** .xml files filter */
+	private final FileFilter XML_FILTER = new XMLFilter();
+	
+	/**
+	 * @see org.eclipse.core.runtime.IPlatformRunnable#run(java.lang.Object)
+	 */
+	public Object run(Object a) throws Exception {
+		String[] args = (String[]) a;
+
+		IFileMigration[] plugs = loadPlugins();
+		if(plugs.length == 0) {
+			getOutput().warn("No plugins were found - skipping migration");
+			return new Integer(0);
+		}
+		
+		if(args.length == 0) {
+			usage();
+			return new Integer(0);
+		}
+		
+		// Restore backed up files
+		List files = new ArrayList();
+		RollbackManager rollbackManager = new RollbackManager(XML_FILTER);
+		try {
+			for (int i = 0; i < args.length; ++i) {
+				File file = new File(args[i]);
+				if(file.exists()) {
+					files.add(file);
+					rollbackManager.restore(file);
+				} else {
+					getOutput().error("Given file or directory (" + args[i] + ") does not exist, skipping!");
+				}
+			}
+		} catch(FatalToolException ex) {
+			getOutput().fatal(ex.getMessage());
+			return new Integer(1);
+		}
+		
+		// Migrate descriptors
+		Iterator it = files.iterator();
+		while(it.hasNext()) {
+			File file = (File)it.next();
+			migrate(plugs, file);
+		}
+		return new Integer(0);
+	}
+	
+	/**
+	 * Print tool usage text.
+	 */
+	protected void usage() {
+		getOutput().fatal("Usage: " + getToolName() + " file_or_dir_name ...");
+	}
+	
+
+	/**
+	 * Migrate given file or directory.
+	 * 
+	 * @param plugs available migration plug-ins
+	 * @param file file or directory to migrate
+	 */
+	protected void migrate(IFileMigration[] plugs, File file) {
+		if (file.isDirectory()) {
+			File[] children = file.listFiles(XML_FILTER);
+			for (int i = 0; i < children.length; ++i) {
+				migrate(plugs, children[i]);
+			}
+		} else {
+			for (int i = 0; i < plugs.length; ++i) {
+				if(plugs[i].migrate(file)) {
+					break;
+				}
+			}
+		}
+	}
+
+	/**
+	 * Load migration plug-ins from the extension registry
+	 * @return
+	 */
+	protected IFileMigration[] loadPlugins() {
+		List plugins = new ArrayList();
+
+		IExtensionPoint point = Platform.getExtensionRegistry()
+				.getExtensionPoint(getExtensionPointId());
+		IExtension[] exts = point.getExtensions();
+		for (int i = 0; i < exts.length; ++i) {
+			IConfigurationElement[] els = exts[i].getConfigurationElements();
+			for (int j = 0; j < els.length; ++j) {
+				try {
+					plugins.add(els[j].createExecutableExtension(ToolConstants.CLASS_PROPERTY));
+				} catch (CoreException ex) {
+					ILog log = Platform.getLog(Platform.getBundle(getPluginId()));
+					log
+							.log(new Status(
+									Status.WARNING,
+									getPluginId(),
+									Status.OK,
+									"Failed to instantiate migration plug-in.",
+									ex));
+				}
+			}
+		}
+		return (IFileMigration[]) plugins.toArray(new IFileMigration[plugins
+				.size()]);
+	}
+	
+	/**
+	 * Get id of the extension point with the migration plug-ins.
+	 * 
+	 * @return id of the extension point with the migration plug-ins.
+	 */
+	protected abstract String getExtensionPointId();
+	
+	/**
+	 * Get id of the tool plug-in.
+	 * @return id of the tool plug-in.
+	 */
+	protected abstract String getPluginId();
+	
+	/**
+	 * Name of the tool to show in the usage text.
+	 * @return name of the tool to show in the usage text. 
+	 */
+	protected abstract String getToolName();
+
+	/**
+	 * Filter for .xml descriptors.
+	 * 
+	 * @author Ivan S. Dubrov
+	 */
+	protected static class XMLFilter implements FileFilter {
+		/**
+		 * @see java.io.FileFilter#accept(java.io.File)
+		 */
+		public boolean accept(File file) {
+			return file.isDirectory() || file.getName().endsWith(XML_SUFFIX);
+		}
+	}
+}

Propchange: geronimo/sandbox/j2g/src/common/src/org/apache/apps/j2gmigrator/XMLMigrationTool.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/j2g/src/common/src/org/apache/apps/j2gmigrator/XMLMigrationTool.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/sandbox/j2g/src/common/src/org/apache/apps/j2gmigrator/XMLMigrationTool.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/j2g/src/configurator/src/org/apache/apps/j2gmigrator/Configurator.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/j2g/src/configurator/src/org/apache/apps/j2gmigrator/Configurator.java?view=auto&rev=520023
==============================================================================
--- geronimo/sandbox/j2g/src/configurator/src/org/apache/apps/j2gmigrator/Configurator.java (added)
+++ geronimo/sandbox/j2g/src/configurator/src/org/apache/apps/j2gmigrator/Configurator.java Mon Mar 19 10:43:27 2007
@@ -0,0 +1,116 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.apps.j2gmigrator;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Properties;
+
+/**
+ * Prepares j2g for following work.
+ * @author Volkov, Stepan S.
+ */
+public class Configurator {
+
+	/**
+	 * Eclipse config filename.
+	 */
+	public static final String CONFIG_FILE = "config.ini";
+
+	/**
+	 * Config.ini parameter. Eclipse install area.
+	 */
+	public static final String INSTALL_AREA = "osgi.install.area";
+
+	/**
+	 * Config.ini parameter. Bundles which will be included to the Eclipse runtime.
+	 */
+	public static final String BUNDLES_KEY = "osgi.bundles";
+
+	/**
+	 * J2g plug-ins path.
+	 */
+	public static final String LOCAL_ECLIPSE_PLUGINS = "../eclipse/plugins";
+
+	/**
+	 * J2g configuration path.
+	 */
+	public static final String LOCAL_ECLIPSE_CONFIG = "../eclipse/configuration";
+
+	/**
+	 * Pattern for external bundles.
+	 */
+	public static final String BUNDLES_PATTERN = "reference:file:";
+
+	/**
+	 * Default Eclipse bundles.
+	 */
+	public static final String DEFAULT_BUNDLES = "org.eclipse.equinox.common@2:start,org.eclipse.core.runtime@2:start,org.eclipse.update.configurator@3:start";
+
+	/**
+	 * Eclipse shared configuration parameter name
+	 */
+	public static final String SHARED_CONFIG = "osgi.sharedConfiguration.area";
+
+	/**
+	 * Adds j2g plugins full paths to the Eclipse platform config.ini file.
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		if (args.length != 0) {
+			try {
+				File confDir = new File(LOCAL_ECLIPSE_CONFIG);
+				if(!confDir.exists())
+				{
+					confDir.mkdir();
+				}
+				String filename = LOCAL_ECLIPSE_CONFIG + File.separator + CONFIG_FILE;
+				File file = new File(filename);
+				file.createNewFile();
+				Properties config = new Properties();
+				String home = args[0];
+				if (home != null) {
+					String eclipseDir = home.replace('\\', '/');
+					config.setProperty(INSTALL_AREA, eclipseDir);
+					String bundles = DEFAULT_BUNDLES;
+					File pluginsDir = new File(LOCAL_ECLIPSE_PLUGINS);
+					File[] plugins = pluginsDir.listFiles();
+					for (int i = 0; i < plugins.length; i++) {
+						String path = plugins[i].getAbsolutePath().replace('\\', '/');
+						bundles = bundles + "," + BUNDLES_PATTERN + path;
+					}
+					config.setProperty(BUNDLES_KEY, bundles);
+					config.setProperty(SHARED_CONFIG, "./");
+					FileOutputStream out = new FileOutputStream(file);
+					config.store(out, "Eclipse configuration file.");
+					out.close();
+					System.out.println("Configuration complete.");
+				}
+				else {
+					System.out.println("System environment variable ECLIPSE_HOME does not set.");
+				}
+			} catch (IOException e) {
+				System.out.println("Cannot create config.ini file. Please, make sure that it is not open and try once again.");
+			}
+		}
+		else {
+			System.out.println("System environment variable ECLIPSE_HOME does not set.");
+		}
+
+	}
+}
\ No newline at end of file

Propchange: geronimo/sandbox/j2g/src/configurator/src/org/apache/apps/j2gmigrator/Configurator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/j2g/src/configurator/src/org/apache/apps/j2gmigrator/Configurator.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/sandbox/j2g/src/configurator/src/org/apache/apps/j2gmigrator/Configurator.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/j2g/src/dependence-plugin/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/geronimo/sandbox/j2g/src/dependence-plugin/META-INF/MANIFEST.MF?view=auto&rev=520023
==============================================================================
--- geronimo/sandbox/j2g/src/dependence-plugin/META-INF/MANIFEST.MF (added)
+++ geronimo/sandbox/j2g/src/dependence-plugin/META-INF/MANIFEST.MF Mon Mar 19 10:43:27 2007
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Dependeces Plug-in
+Bundle-SymbolicName: com.ibm.j2g.sources.dependence;singleton:=true
+Bundle-Version: 1.0.0
+Bundle-Vendor: IBM
+Bundle-Localization: plugin
+Require-Bundle: com.ibm.j2g,
+ com.ibm.j2g.sources,
+ org.eclipse.jdt.core,
+ org.eclipse.core.resources,
+ org.eclipse.core.runtime,
+ org.eclipse.jdt,
+ org.eclipse.jface.text
+Bundle-ClassPath: .

Added: geronimo/sandbox/j2g/src/dependence-plugin/build.properties
URL: http://svn.apache.org/viewvc/geronimo/sandbox/j2g/src/dependence-plugin/build.properties?view=auto&rev=520023
==============================================================================
--- geronimo/sandbox/j2g/src/dependence-plugin/build.properties (added)
+++ geronimo/sandbox/j2g/src/dependence-plugin/build.properties Mon Mar 19 10:43:27 2007
@@ -0,0 +1,21 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+ source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
\ No newline at end of file

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/build.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/build.properties
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/build.properties
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/j2g/src/dependence-plugin/plugin.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/j2g/src/dependence-plugin/plugin.xml?view=auto&rev=520023
==============================================================================
--- geronimo/sandbox/j2g/src/dependence-plugin/plugin.xml (added)
+++ geronimo/sandbox/j2g/src/dependence-plugin/plugin.xml Mon Mar 19 10:43:27 2007
@@ -0,0 +1,25 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+ <?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension
+         point="com.ibm.j2g.sources.migrations">
+      <migration class="com.ibm.j2g.source.dependence.DependenceJavaMigration"/>
+   </extension>
+
+</plugin>

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/plugin.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/plugin.xml
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/plugin.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/Anybody.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/Anybody.java?view=auto&rev=520023
==============================================================================
--- geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/Anybody.java (added)
+++ geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/Anybody.java Mon Mar 19 10:43:27 2007
@@ -0,0 +1,60 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+/*
+ * Auto-generated by J2G Migration. 
+ */
+package org.apache.apps.j2gmigrator.compatibility;
+
+import java.security.Principal;
+
+public class Anybody
+    implements Comparable, Principal
+{
+
+    public Anybody()
+    {
+    }
+
+    public int hashCode()
+    {
+        return ANYBODY.hashCode();
+    }
+
+    public String getName()
+    {
+        return ANYBODY;
+    }
+
+    public String toString()
+    {
+        return ANYBODY;
+    }
+
+    public boolean equals(Object another)
+    {
+        return true;
+    }
+
+    public int compareTo(Object o)
+    {
+        return 0;
+    }
+
+    public static final String ANYBODY = "<ANYBODY>";
+    public static final Anybody ANYBODY_PRINCIPAL = new Anybody();
+
+}
\ No newline at end of file

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/Anybody.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/Anybody.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/Anybody.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/DigestCallback.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/DigestCallback.java?view=auto&rev=520023
==============================================================================
--- geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/DigestCallback.java (added)
+++ geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/DigestCallback.java Mon Mar 19 10:43:27 2007
@@ -0,0 +1,32 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+/*
+ * Auto-generated by J2G Migration. 
+ */
+package org.apache.apps.j2gmigrator.compatibility;
+
+import java.security.MessageDigest;
+import java.util.Map;
+
+public interface DigestCallback {
+
+  public abstract void init(Map map);
+
+  public abstract void preDigest(MessageDigest digest);
+
+  public abstract void postDigest(MessageDigest digest);
+}

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/DigestCallback.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/DigestCallback.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/DigestCallback.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/GeronimoLoginModule.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/GeronimoLoginModule.java?view=auto&rev=520023
==============================================================================
--- geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/GeronimoLoginModule.java (added)
+++ geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/GeronimoLoginModule.java Mon Mar 19 10:43:27 2007
@@ -0,0 +1,352 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+/*
+ * Auto-generated by J2G Migration. 
+ */
+package org.apache.apps.j2gmigrator.compatibility;
+
+import org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal;
+import org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal;
+
+import javax.security.auth.Subject;
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.NameCallback;
+import javax.security.auth.callback.PasswordCallback;
+import javax.security.auth.callback.UnsupportedCallbackException;
+import javax.security.auth.login.FailedLoginException;
+import javax.security.auth.login.LoginException;
+import javax.security.auth.spi.LoginModule;
+
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.security.Principal;
+import java.security.acl.Group;
+
+public abstract class GeronimoLoginModule implements LoginModule {
+
+	protected Subject subject;
+
+	protected CallbackHandler callbackHandler;
+
+	protected Map sharedState;
+
+	protected Map options;
+
+	protected boolean useFirstPass;
+
+	protected boolean loginOk;
+
+	protected String principalClassName;
+
+	protected Principal unauthenticatedIdentity;
+
+	private Principal identity;
+
+	private char passport[];
+
+	private String algorithm;
+
+	private String charset;
+
+	private String encoding;
+
+	private boolean ignorePasswordCase;
+
+	protected final static int USERNAME_POS = 0;
+
+	protected final static int PASSWORD_POS = 1;
+
+	public GeronimoLoginModule() {
+		algorithm = null;
+		charset = null;
+		encoding = null;
+	}
+
+	public boolean abort() throws LoginException {
+		return true;
+	}
+
+	public boolean commit() throws LoginException {
+		if (!loginOk) {
+			return false;
+		}
+		Set heads = subject.getPrincipals();
+		Principal identity = getIdentity();
+		heads.add(identity);
+		Group roleSets[] = getRoleSets();
+		for (int i = 0; i < roleSets.length; i++) {
+			Group group = roleSets[i];
+			String name = group.getName();
+			Group subjectGroup = createGroup(name, heads);
+			Principal role;
+			Enumeration members = group.members();
+			while (members.hasMoreElements()) {
+				role = (Principal) members.nextElement();
+				subjectGroup.addMember(role);
+				if(name.equals("Roles")){
+					heads.add(new GeronimoGroupPrincipal(role.getName()));
+				}
+			}
+		}
+		return true;
+	}
+
+	protected Principal getIdentity() {
+		return identity;
+	}
+
+	public void initialize(Subject subject, CallbackHandler callbackHandler,
+			Map sharedState, Map options) {
+		this.subject = subject;
+		this.callbackHandler = callbackHandler;
+		this.sharedState = sharedState;
+		this.options = options;
+		String passwordStacking = (String) options.get("password-stacking");
+		if (passwordStacking != null
+				&& passwordStacking.equalsIgnoreCase("useFirstPass")) {
+			useFirstPass = true;
+		}
+		principalClassName = (String) options.get("principalClass");
+		String name = (String) options.get("unauthenticatedIdentity");
+		if (name != null) {
+			try {
+				unauthenticatedIdentity = createIdentity(name);
+			} catch (Exception e) {
+			}
+		}
+		algorithm = (String) options.get("hashAlgorithm");
+		if (algorithm != null) {
+			encoding = (String) options.get("hashEncoding");
+			if (encoding == null) {
+				encoding = "BASE64";
+			}
+			charset = (String) options.get("hashCharset");
+		}
+		String flag = (String) options.get("ignorePasswordCase");
+		ignorePasswordCase = Boolean.valueOf(flag).booleanValue();
+	}
+
+	public boolean login() throws LoginException {
+		loginOk = false;
+		if (useFirstPass) {
+			Object identity = sharedState.get("javax.security.auth.login.name");
+			Object credential = sharedState
+					.get("javax.security.auth.login.password");
+			if (identity != null && credential != null) {
+				loginOk = true;
+			}
+		}
+		if (loginOk) {
+			Object username = sharedState.get("javax.security.auth.login.name");
+			if (username instanceof Principal) {
+				identity = (Principal) username;
+			} else {
+				try {
+					identity = createIdentity(username.toString());
+				} catch (Exception e) {
+					throw new LoginException("Failed to create principal: "
+							+ e.getMessage());
+				}
+			}
+			Object password = sharedState
+					.get("javax.security.auth.login.password");
+
+			if (password != null) {
+				if (password instanceof char[]) {
+					passport = (char[]) password;
+				} else {
+					passport = password.toString().toCharArray();
+				}
+			}
+			return true;
+		}
+		loginOk = false;
+
+		String username = null;
+		String password = null;
+
+		String[] usernameAndPassword = getUsernameAndPassword();
+
+		username = usernameAndPassword[USERNAME_POS];
+		password = usernameAndPassword[PASSWORD_POS];
+		if (username == null && password == null) {
+			identity = unauthenticatedIdentity;
+		}
+		if (identity == null) {
+			try {
+				identity = createIdentity(username);
+			} catch (Exception e) {
+				throw new LoginException("Failed to create principal: "
+						+ e.getMessage());
+			}
+			if (algorithm != null) {
+				password = createPasswordHash(username, password);
+			}
+			String expectedPassword = getUsersPassword();
+			if (!validatePassword(password, expectedPassword)) {
+				throw new FailedLoginException(
+						"Password Incorrect/Password Required");
+			}
+		}
+		if (getUseFirstPass()) {
+			sharedState.put("javax.security.auth.login.name", username);
+			sharedState.put("javax.security.auth.login.password", passport);
+		}
+		loginOk = true;
+		return loginOk;
+	}
+
+	protected String[] getUsernameAndPassword() throws LoginException {
+		String usernamePassword[] = { null, null };
+		if (callbackHandler == null) {
+			throw new LoginException(
+					"Error occurs: there are no CallbackHandler available to get information about authentication");
+		}
+		String username = null;
+		String password = null;
+		try {
+			Callback callbacks[] = { new NameCallback("Username: "), new PasswordCallback("Password: ", false) };
+			callbackHandler.handle(callbacks);
+			NameCallback nameCallback = (NameCallback) callbacks[0];
+			PasswordCallback passwordCallback = (PasswordCallback) callbacks[1];
+			username = nameCallback.getName();
+			char helperPassword[] = passwordCallback.getPassword();
+			if (helperPassword != null) {
+				passport = new char[helperPassword.length];
+				System.arraycopy(helperPassword, 0, passport, 0,
+						helperPassword.length);
+				passwordCallback.clearPassword();
+				password = new String(passport);
+			}
+		} catch (IOException ioe) {
+			throw new LoginException(ioe.toString());
+		} catch (UnsupportedCallbackException uce) {
+			throw new LoginException("CallbackHandler does not support: "
+					+ uce.getCallback());
+		}
+		usernamePassword[USERNAME_POS] = username;
+		usernamePassword[PASSWORD_POS] = password;
+		return usernamePassword;
+	}
+
+	protected boolean validatePassword(String inputPassword,
+			String expectedPassword) {
+		if (inputPassword == null || expectedPassword == null) {
+			return false;
+		}
+		return ignorePasswordCase ? inputPassword
+				.equalsIgnoreCase(expectedPassword) : inputPassword
+				.equals(expectedPassword);
+	}
+
+	protected String createPasswordHash(String username, String password) {
+		DigestCallback callback = null;
+		String callbackClassName = (String) options.get("digestCallback");
+		if (callbackClassName != null) {
+			try {
+				Class callbackClass = loadSomeClass(callbackClassName);
+				callback = (DigestCallback) callbackClass.newInstance();
+			} catch (Exception e) {
+				SecurityException securityExeption = new SecurityException(
+						"Cannot load DigestCallback");
+				securityExeption.initCause(e);
+				throw securityExeption;
+			}
+			HashMap optionsMap = new HashMap(options);
+			optionsMap.put("javax.security.auth.login.name", username);
+			optionsMap.put("javax.security.auth.login.password", password);
+			callback.init(optionsMap);
+		}
+
+		return PasswordHasher.calculateHash(algorithm, encoding, charset,
+				username, password, callback);
+	}
+
+	protected boolean getUseFirstPass() {
+		return useFirstPass;
+	}
+
+	protected Principal getUnauthenticatedIdentity() {
+		return unauthenticatedIdentity;
+	}
+
+	protected Object getCredentials() {
+		return passport;
+	}
+
+	public boolean logout() throws LoginException {
+		Principal identity = getIdentity();
+		Set principals = subject.getPrincipals();
+		principals.remove(identity);
+		return true;
+	}
+
+	protected Principal createIdentity(String username) throws Exception {
+		Principal principal = null;
+		if (principalClassName != null) {
+			Class loadedClass = loadSomeClass(principalClassName);
+			Class signatures[] = { java.lang.String.class };
+			Constructor constructorInstance = loadedClass
+					.getConstructor(signatures);
+			Object argumentsForConstructor[] = { username };
+			principal = (Principal) constructorInstance
+					.newInstance(argumentsForConstructor);
+		} else {
+			principal = new GeronimoUserPrincipal(username);
+		}
+		return principal;
+	}
+
+	private Class loadSomeClass(String classname) throws ClassNotFoundException {
+		ClassLoader loader = Thread.currentThread().getContextClassLoader();
+		return loader.loadClass(classname);
+	}
+
+	protected String getUsername() {
+		return (getIdentity() != null) ? getIdentity().getName() : null;
+	}
+
+	protected Group createGroup(String name, Set principals) {
+		Group roles = null;
+		Iterator principalsIter = principals.iterator();
+		while (principalsIter.hasNext()) {
+			Object next = principalsIter.next();
+			if (next instanceof Group) {
+				Group nextGroup = (Group) next;
+				if (nextGroup.getName().equals(name)) {
+					roles = nextGroup;
+					break;
+				}
+			}
+		}
+		if (roles == null) {
+			roles = new GeronimoSimpleGroup(name);
+			principals.add(roles);
+		}
+		return roles;
+	}
+
+	protected abstract String getUsersPassword() throws LoginException;
+
+	protected abstract Group[] getRoleSets() throws LoginException;
+}
\ No newline at end of file

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/GeronimoLoginModule.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/GeronimoLoginModule.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/GeronimoLoginModule.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/GeronimoSimpleGroup.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/GeronimoSimpleGroup.java?view=auto&rev=520023
==============================================================================
--- geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/GeronimoSimpleGroup.java (added)
+++ geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/GeronimoSimpleGroup.java Mon Mar 19 10:43:27 2007
@@ -0,0 +1,97 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+ /*
+ * Auto-generated by J2G Migration. 
+ */
+package org.apache.apps.j2gmigrator.compatibility;
+
+import java.security.Principal;
+import java.security.acl.Group;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal;
+
+public class GeronimoSimpleGroup extends GeronimoGroupPrincipal implements Group {
+
+	/**
+	 * Serial ID.
+	 */
+	private static final long serialVersionUID = 4220122854158936883L;
+
+	private HashMap members;
+
+	public GeronimoSimpleGroup(String name) {
+		super(name);
+		members = new HashMap(3);
+	}
+
+	public boolean addMember(Principal user) {
+		boolean isMember = members.containsKey(user);
+		if (!isMember) {
+			members.put(user, user);
+		}
+		return !isMember;
+	}
+
+	public boolean isMember(Principal member) {
+		boolean isMember = members.containsKey(member);
+		if (!isMember) {
+			isMember = member instanceof Anybody;
+			if (!isMember && (member instanceof Nobody)) {
+				return false;
+			}
+		}
+
+		if (!isMember) {
+			Collection values = members.values();
+			Iterator iter = values.iterator();
+			do {
+				if (isMember || !iter.hasNext()) {
+					break;
+				}
+				Object next = iter.next();
+				if (next instanceof Group) {
+					Group group = (Group) next;
+					isMember = group.isMember(member);
+				}
+			} while (true);
+		}
+		return isMember;
+	}
+
+	public Enumeration members() {
+		return Collections.enumeration(members.values());
+	}
+
+	public boolean removeMember(Principal user) {
+		return (members.remove(user) != null);
+	}
+
+	public String toString() {
+		String tmp = new String(getName());
+		tmp.concat("(MEMBERS:");
+		for (Iterator iter = members.keySet().iterator(); iter.hasNext(); tmp.concat(",")) {
+			tmp.concat(iter.next().toString());
+		}
+		tmp.concat(")");
+		return tmp.toString();
+	}
+}

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/GeronimoSimpleGroup.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/GeronimoSimpleGroup.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/GeronimoSimpleGroup.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/Nobody.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/Nobody.java?view=auto&rev=520023
==============================================================================
--- geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/Nobody.java (added)
+++ geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/Nobody.java Mon Mar 19 10:43:27 2007
@@ -0,0 +1,51 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+ /*
+ * Auto-generated by J2G Migration. 
+ */
+package org.apache.apps.j2gmigrator.compatibility;
+
+import java.security.Principal;
+
+public class Nobody implements Comparable, Principal {
+	public static final String NOBODY = "<NOBODY>";
+
+	public static final Nobody NOBODY_PRINCIPAL = new Nobody();
+
+	public Nobody() {
+	}
+
+	public int hashCode() {
+		return NOBODY.hashCode();
+	}
+
+	public String getName() {
+		return NOBODY;
+	}
+
+	public String toString() {
+		return NOBODY;
+	}
+
+	public boolean equals(Object another) {
+		return false;
+	}
+
+	public int compareTo(Object o) {
+		return 1;
+	}
+}
\ No newline at end of file

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/Nobody.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/Nobody.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/Nobody.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/PasswordHasher.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/PasswordHasher.java?view=auto&rev=520023
==============================================================================
--- geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/PasswordHasher.java (added)
+++ geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/PasswordHasher.java Mon Mar 19 10:43:27 2007
@@ -0,0 +1,102 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+ /*
+ * Auto-generated by J2G Migration. 
+ */
+package org.apache.apps.j2gmigrator.compatibility;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import org.apache.geronimo.util.encoders.Base64Encoder;
+
+public class PasswordHasher {
+	
+	private final static String HEX_ENC = "HEX";
+	private final static String ISO_ENC = "ISO-8859-1";
+	private final static String BASE_64_ENC = "BASE64";
+	
+	public static String calculateHash(String algorithm, String encoding, String charset, String username, String password, DigestCallback callback) {
+		String passwordHash = null;
+		byte passBytes[];
+		try {
+			if (charset == null) {
+				passBytes = password.getBytes();
+			}
+			else {
+				passBytes = password.getBytes(charset);
+			}
+		} catch (UnsupportedEncodingException uee) {
+			passBytes = password.getBytes();
+		}
+		try {
+			MessageDigest mesDigest = MessageDigest.getInstance(algorithm);
+			if (callback != null) {
+				callback.preDigest(mesDigest);
+			}
+			mesDigest.update(passBytes);
+			if (callback != null) {
+				callback.postDigest(mesDigest);
+			}
+			byte hash[] = mesDigest.digest();
+			if (encoding.equalsIgnoreCase(HEX_ENC)) {
+				passwordHash = base16Encoding(hash);
+			} else if (encoding.equalsIgnoreCase(BASE_64_ENC)) {
+				passwordHash = base64Encoding(hash);
+			}
+		} catch (Exception e) {}
+		return passwordHash;
+	}
+
+	private static String base16Encoding(byte encodedChain[]) {
+		StringBuffer buffer = new StringBuffer(encodedChain.length * 2);
+		for (int i = 0; i < encodedChain.length; i++) {
+			byte nextByte = encodedChain[i];
+			char nextChar = (char) (nextByte >> 4 & 0xf);
+			if (nextChar > '\t') {
+				nextChar = (char) ((nextChar - 10) + 97);
+			}
+			else {
+				nextChar += '0';
+			}
+			buffer.append(nextChar);
+			nextChar = (char) (nextByte & 0xf);
+			if (nextChar > '\t') {
+				nextChar = (char) ((nextChar - 10) + 97);
+			}
+			else {
+				nextChar += '0';
+			}
+			buffer.append(nextChar);
+		}
+		return buffer.toString();
+	}
+
+	private static String base64Encoding(byte bytes[]) {
+		ByteArrayOutputStream out = new ByteArrayOutputStream();
+		Base64Encoder encoder = new Base64Encoder();
+		try {
+			encoder.encode(bytes, 0, bytes.length, out);
+		} catch (IOException e) {}
+		String result = null;
+		try {
+			result = out.toString(ISO_ENC);
+		} catch (UnsupportedEncodingException e) {}
+		return result;
+	}
+}

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/PasswordHasher.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/PasswordHasher.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/compatibility/PasswordHasher.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/APIReplaceVisitor.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/APIReplaceVisitor.java?view=auto&rev=520023
==============================================================================
--- geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/APIReplaceVisitor.java (added)
+++ geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/APIReplaceVisitor.java Mon Mar 19 10:43:27 2007
@@ -0,0 +1,152 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.apps.j2gmigrator.source.dependence;
+
+import java.util.List;
+
+import org.apache.apps.j2gmigrator.IOutput;
+import org.apache.apps.j2gmigrator.Tool;
+import org.eclipse.jdt.core.dom.AST;
+import org.eclipse.jdt.core.dom.ASTMatcher;
+import org.eclipse.jdt.core.dom.ASTVisitor;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.ImportDeclaration;
+import org.eclipse.jdt.core.dom.Name;
+import org.eclipse.jdt.core.dom.QualifiedName;
+import org.eclipse.jdt.core.dom.SimpleName;
+import org.eclipse.jdt.core.dom.StructuralPropertyDescriptor;
+
+
+/**
+ * Finds specified names and replaces its by new one.
+ * @author Volkov, Stepan S.
+ */
+public class APIReplaceVisitor extends ASTVisitor {
+
+	/** Name to replace */
+	private QualifiedName targetName;
+
+	/** New name */
+	private QualifiedName newName;
+
+	/** Compilation unit */
+	private CompilationUnit unit;
+
+	/** Nodes matcher */
+	private ASTMatcher matcher;
+
+	/** Output */
+	private IOutput out;
+
+	/** Import changing flag */
+	private boolean isImportAffected;
+
+	/** Changes counter */
+	private int changes = 0; 
+	
+	/**
+	 * Constructor. Creates new instance of APIReplaceVisitor.
+	 * @param unit compilation unit.
+	 * @param targetName target name.
+	 * @param newName new name.
+	 */
+	public APIReplaceVisitor(CompilationUnit unit, QualifiedName targetName, QualifiedName newName) {
+		super(false);
+		this.targetName = targetName;
+		this.newName = newName;
+		this.unit = unit;
+		matcher = new ASTMatcher(false);
+		out = Tool.getCurrent().getOutput();
+		isImportAffected = false;
+	}
+
+	/**
+	 * Replaces qualified names in imports.
+	 */
+	public boolean visit(ImportDeclaration importDeclaration) {
+		QualifiedName name = (QualifiedName) importDeclaration.getName();
+		if (!importDeclaration.isOnDemand()) {
+			int position = name.getStartPosition();
+			if (matcher.match(name, targetName)) {
+				isImportAffected = true;
+				AST ast = importDeclaration.getAST();
+				Name replacer = ast.newName(newName.getFullyQualifiedName());
+				printChanges(name, newName, unit.getLineNumber(position), unit.getColumnNumber(position));
+				importDeclaration.setName(replacer);
+			}
+		}
+		else {
+			if (matcher.match(name, targetName.getQualifier())) {
+				List imports = unit.imports();
+				AST ast = unit.getAST();
+				ImportDeclaration newImport = ast.newImportDeclaration();
+				newImport.setName(newName);
+				imports.add(newImport);
+				isImportAffected = true;
+				out.info("New import was added: '" + newName.getFullyQualifiedName()+"'.");
+				changes++;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Replaces qualified name.
+	 */
+	public boolean visit(QualifiedName name) {
+		int position = name.getStartPosition();
+		if (matcher.match(name, targetName)) {
+			AST ast = name.getAST();
+			Name replacer = ast.newName(newName.getFullyQualifiedName());
+			StructuralPropertyDescriptor desc = name.getLocationInParent();
+			printChanges(name, newName, unit.getLineNumber(position), unit.getColumnNumber(position));
+			name.getParent().setStructuralProperty(desc, replacer);
+		}
+		return false;
+	}
+
+	/**
+	 * Replaces simple name.
+	 */
+	public boolean visit(SimpleName name) {
+		int position = name.getStartPosition();
+		if (matcher.match(name, targetName.getName()) && isImportAffected) {
+			printChanges(name, newName.getName(), unit.getLineNumber(position), unit.getColumnNumber(position));
+			name.setIdentifier(newName.getName().getIdentifier());
+		}
+		return false;
+	}
+
+	/**
+	 * Prints out about changes in compilation unit.
+	 * @param name replaced name.
+	 * @param newName new name.
+	 * @param row row in source unit.
+	 * @param col column in source unit.
+	 */
+	private void printChanges(Name name, Name newName, int row, int col) {
+		changes++;
+		out.info("Name '" + name.getFullyQualifiedName() + "' was replaced by '" + newName.getFullyQualifiedName() + "'.", row, col);
+	}
+
+	/**
+	 * @return the changes count
+	 */
+	public int getChanges() {
+		return changes;
+	}
+}

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/APIReplaceVisitor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/APIReplaceVisitor.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/APIReplaceVisitor.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/DependenceJavaMigration.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/DependenceJavaMigration.java?view=auto&rev=520023
==============================================================================
--- geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/DependenceJavaMigration.java (added)
+++ geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/DependenceJavaMigration.java Mon Mar 19 10:43:27 2007
@@ -0,0 +1,261 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package org.apache.apps.j2gmigrator.source.dependence;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintWriter;
+import java.util.Iterator;
+import java.util.Properties;
+import java.util.Set;
+
+import org.apache.apps.j2gmigrator.FatalToolException;
+import org.apache.apps.j2gmigrator.IJavaMigration;
+import org.apache.apps.j2gmigrator.IOutput;
+import org.apache.apps.j2gmigrator.RollbackManager;
+import org.apache.apps.j2gmigrator.Tool;
+import org.apache.apps.j2gmigrator.ToolConstants;
+import org.apache.apps.j2gmigrator.compatibility.Anybody;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.dom.AST;
+import org.eclipse.jdt.core.dom.ASTNode;
+import org.eclipse.jdt.core.dom.ASTParser;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.Name;
+import org.eclipse.jdt.core.dom.QualifiedName;
+import org.eclipse.jface.text.Document;
+import org.eclipse.text.edits.TextEdit;
+
+
+/**
+ * Determines all references of the source compilation unit to classes which are incompatible with
+ * Geronimo.
+ * @author Volkov, Stepan S.
+ */
+public class DependenceJavaMigration implements IJavaMigration {
+	/**
+	 * Plug-in name.
+	 */
+	private final static String PLUGIN_NAME = "Dependence plug-in";
+
+	/**
+	 * Tool output
+	 */
+	private IOutput out;
+
+	/**
+	 * Property file with default Geronimo libraries names.
+	 */
+	private final String DEFAULT_LIBS_FILENAME = "default_jars.properties";
+
+	/**
+	 * Set of default Geronimo libraries names.
+	 */
+	private static Set defaultLibs;
+
+	/**
+	 * Compatibility sources names.
+	 */
+	private final String COMPTIBILITY_SOURCES = "compatible_sources.properties";
+
+	/**
+	 * Set of default Geronimo libraries names.
+	 */
+	private static Properties compatibilitySources;
+
+	/**
+	 * Property file with class analogies.
+	 */
+	private final String CLASS_ANALOGIES_FILENAME = "class_analogies.properties";
+
+	/**
+	 * Properties with class analogies.
+	 */
+	private static Properties classAnalogies;
+
+	/**
+	 * Compatibles package qualified name.
+	 */
+	private static final String COMPATIBLES_PACKAGE = "com/ibm/j2g/compatibility";
+
+	/**
+	 * Java resources extension.
+	 */
+	private static final String JAVA_EXT = ".java";
+
+	/**
+	 * Byte buffer size.
+	 */
+	private static final int BUFFER_SIZE = 1024;
+
+	/**
+	 * Constructor. Loads default libs names and class analogies names.
+	 * @throws FatalToolException if cannot load properties file with default jars names.
+	 */
+	public DependenceJavaMigration() throws FatalToolException {
+		super();
+		if (defaultLibs == null) {
+			try {
+				Properties prop = new Properties();
+				prop.load(DependenceJavaMigration.class.getResourceAsStream(DEFAULT_LIBS_FILENAME));
+				defaultLibs = prop.keySet();
+			} catch (IOException e) {
+				throw new FatalToolException("Cannot load properties file with default jars names.");
+			}
+		}
+
+		if (classAnalogies == null) {
+			try {
+				classAnalogies = new Properties();
+				classAnalogies.load(DependenceJavaMigration.class.getResourceAsStream(CLASS_ANALOGIES_FILENAME));
+			} catch (IOException e) {
+				throw new FatalToolException("Cannot load properties file with class analogies.");
+			}
+		}
+		if (compatibilitySources == null) {
+			try {
+				compatibilitySources = new Properties();
+				compatibilitySources.load(DependenceJavaMigration.class.getResourceAsStream(COMPTIBILITY_SOURCES));
+			} catch (IOException e) {
+				throw new FatalToolException("Cannot load properties file with compatibility classnames.");
+			}
+
+		}
+	}
+
+	/**
+	 * Determines all references of the source compilation unit to classes which are incompatible
+	 * with Geronimo.
+	 * @param source compilation unit for migration.
+	 */
+	public boolean migrate(ASTNode source) {
+		out = Tool.getCurrent().getOutput();
+		if (source instanceof CompilationUnit) {
+			CompilationUnit compilationUnit = (CompilationUnit) source;
+			String unitName = compilationUnit.getJavaElement().getElementName();
+			boolean isSourceChanged = false;
+			out.info("[" + PLUGIN_NAME + "] " + "Migration started: " + unitName);
+			Set replacedClasses = classAnalogies.keySet();
+			AST ast = compilationUnit.getAST();
+			Iterator classesIterator = replacedClasses.iterator();
+			while (classesIterator.hasNext()) {
+				String targetStr = (String) classesIterator.next();
+				String newStr = classAnalogies.getProperty(targetStr);
+				Name replaced = ast.newName(targetStr);
+				Name replacer = ast.newName(newStr);
+
+				if (replaced.isQualifiedName() && replacer.isQualifiedName()) {
+					QualifiedName targetName = (QualifiedName) replaced;
+					QualifiedName newName = (QualifiedName) replacer;
+					APIReplaceVisitor apiReplacer = new APIReplaceVisitor(compilationUnit, targetName, newName);
+					compilationUnit.accept(apiReplacer);
+					apiReplacer.visit(compilationUnit);
+					isSourceChanged = isSourceChanged || (apiReplacer.getChanges() > 0);
+				}
+				else {
+					out.error("Wrong class names for JBoss classes and it's Geronimo analogies in property file");
+					break;
+				}
+
+			}
+			try {
+				if (isSourceChanged) {
+					String path = compilationUnit.getJavaElement().getUnderlyingResource().getLocation().toPortableString();
+					String package_path = compilationUnit.getPackage().getName().getFullyQualifiedName().replace('.', IPath.SEPARATOR);
+					String src_path = path.substring(0, path.indexOf(package_path));
+					String compatible_dir = src_path + COMPATIBLES_PACKAGE;
+					File pack = new File(compatible_dir);
+					if (!pack.exists()) {
+						pack.mkdirs();
+						Set compatibleSources = compatibilitySources.keySet();
+						Iterator keys = compatibleSources.iterator();
+						while (keys.hasNext()) {
+							String classname = (String)keys.next();
+							String sourceName = classname.substring(classname.lastIndexOf('.') + 1) + JAVA_EXT;
+							File addedSource = new File(pack, sourceName);
+							addedSource.createNewFile();
+							PrintWriter writer = new PrintWriter(new FileOutputStream(addedSource));
+							InputStream inStream = Anybody.class.getResourceAsStream(sourceName);
+
+							byte[] buffer = new byte[BUFFER_SIZE];
+							int len = 0;
+							while ((len = inStream.read(buffer)) > 0) {
+								String outpt = new String(buffer, 0, len);
+								writer.print(outpt);
+							}
+							inStream.close();
+							writer.close();
+						}
+						IWorkspace workspace = ResourcesPlugin.getWorkspace();
+						IProject project = workspace.getRoot().getProject(ToolConstants.TEMPORARY_PROJECT_NAME);
+						project.refreshLocal(IResource.DEPTH_INFINITE, null);
+					}
+					ICompilationUnit isource = (ICompilationUnit) compilationUnit.getJavaElement();
+					String contents = isource.getBuffer().getContents();
+					File file = new File(isource.getUnderlyingResource().getLocation().toOSString() + RollbackManager.BACKUP_SUFFIX);
+					file.createNewFile();
+					FileOutputStream fout = new FileOutputStream(file);
+					fout.write(contents.getBytes());
+					fout.close();
+					Document document = new Document(contents);
+					TextEdit edits = compilationUnit.rewrite(document, isource.getJavaProject().getOptions(true));
+					edits.apply(document);
+					String newSource = document.get();
+					isource.getBuffer().setContents(newSource);
+					isource.save(null, true);
+
+					ASTParser parser = ASTParser.newParser(AST.JLS3);
+					parser.setResolveBindings(true);
+					parser.setSource(isource);
+					compilationUnit = (CompilationUnit) parser.createAST(null);
+				}
+			} catch (IOException ex) {
+				out.fatal("The plug-in cannot add compatible package or save buckup because of I/O error occurs. Make sure that the source directories are not under write protection.");
+			} catch (Exception e) {
+				out.fatal("The plug-in cannot get access to the resources. Make sure that the source files are not under write protection or not deleted by another process.");
+			}
+			NodesVisitor visitor = new NodesVisitor(compilationUnit);
+			compilationUnit.accept(visitor);
+			visitor.visit(compilationUnit);
+			boolean isSourceValid = visitor.isSourceValid();
+			if (isSourceChanged && !isSourceValid) {
+				out.warn("Errors were found in source file! Changes were saved. The original file was saved with name " + unitName + RollbackManager.BACKUP_SUFFIX);
+			}
+			out.info("[" + PLUGIN_NAME + "] " + "Migration finished: " + unitName);
+			return false;
+		}
+		else {
+			out.error("[" + PLUGIN_NAME + "] " + "Wrong type of source node.");
+		}
+		return false;
+	}
+
+	/**
+	 * @return set of default lib names.
+	 */
+	public static Set getDefaultLibs() {
+		return defaultLibs;
+	}
+}
\ No newline at end of file

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/DependenceJavaMigration.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/DependenceJavaMigration.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/DependenceJavaMigration.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/NodesVisitor.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/NodesVisitor.java?view=auto&rev=520023
==============================================================================
--- geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/NodesVisitor.java (added)
+++ geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/NodesVisitor.java Mon Mar 19 10:43:27 2007
@@ -0,0 +1,356 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package org.apache.apps.j2gmigrator.source.dependence;
+
+import java.io.File;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.apps.j2gmigrator.FatalToolException;
+import org.apache.apps.j2gmigrator.IOutput;
+import org.apache.apps.j2gmigrator.Tool;
+import org.apache.apps.j2gmigrator.ToolConstants;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.dom.ASTVisitor;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.Expression;
+import org.eclipse.jdt.core.dom.IBinding;
+import org.eclipse.jdt.core.dom.ITypeBinding;
+import org.eclipse.jdt.core.dom.ImportDeclaration;
+import org.eclipse.jdt.core.dom.MethodDeclaration;
+import org.eclipse.jdt.core.dom.MethodInvocation;
+import org.eclipse.jdt.core.dom.Name;
+import org.eclipse.jdt.core.dom.QualifiedName;
+import org.eclipse.jdt.core.dom.QualifiedType;
+import org.eclipse.jdt.core.dom.SimpleName;
+import org.eclipse.jdt.core.dom.SimpleType;
+import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
+import org.eclipse.jdt.core.dom.Type;
+import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
+
+
+/**
+ * Visitor for ASTNode. Finds types dependencies and reports to tool output.
+ * 
+ * @author Volkov, Stepan S.
+ */
+public class NodesVisitor extends ASTVisitor {
+	/**
+	 * Tool output.
+	 */
+	private IOutput out;
+
+	/**
+	 * Current compilation unit.
+	 */
+	private CompilationUnit unit;
+
+	/**
+	 * Set of declared variables.
+	 */
+	private Set vars;
+
+	/**
+	 * Set of already picked libraries.
+	 */
+	private Set linkedLibs;
+
+	/**
+	 * Set of declared classes in imports.
+	 */
+	private Set imports;
+
+	/**
+	 * 
+	 */
+	
+	private boolean wrongApiUsing;
+
+	/**
+	 * Constructor.
+	 * 
+	 * @param unit
+	 *            compilation unit which will be visited.
+	 * @param out
+	 * @param visitDocTypes
+	 */
+	public NodesVisitor(CompilationUnit unit) {
+		super(false);
+		this.out = Tool.getCurrent().getOutput();
+		this.unit = unit;
+		vars = new HashSet();
+		linkedLibs = new HashSet();
+		imports = new HashSet();
+		wrongApiUsing = false;
+	}
+
+	/**
+	 * Solves binding and if it's corressponds to Geronimo repository library
+	 * warns about it.
+	 * 
+	 * @param binding
+	 * @throws FatalToolException
+	 */
+	private void solveBinding(IBinding binding, String name) {
+		if (binding instanceof ITypeBinding) {
+			try {
+				String linkedJarName = binding.getJavaElement().getPath().toFile().getName();
+				if (linkedJarName.startsWith(ToolConstants.GERONIMO_REP)) {
+					File lib = binding.getJavaElement().getUnderlyingResource().getRawLocation().toFile();
+					String artifactName = getGeronimoArtifactName(lib);
+					if (!linkedLibs.contains(lib.getName()) && !DependenceJavaMigration.getDefaultLibs().contains(artifactName)) {
+						out.warn("You should add '" + artifactName + "' dependency.");
+						linkedLibs.add(lib.getName());
+					}
+				}
+			} catch (JavaModelException e) {
+				out.fatal("Cannot get access to library for resolve name'" + name + "'.");
+			}
+		}
+	}
+
+	/**
+	 * Visits {@link ImportDeclaration} and trying to resolve binding.
+	 */
+	public boolean visit(ImportDeclaration importDeclaration) {
+		if (importDeclaration.resolveBinding() != null) {
+			String name = importDeclaration.getName().getFullyQualifiedName();
+			solveBinding(importDeclaration.resolveBinding(), name);
+		}
+		else {
+			printImportError(importDeclaration.getName().getFullyQualifiedName(), importDeclaration.getStartPosition());
+			if (importDeclaration.getName().isQualifiedName()) {
+				QualifiedName qualifiedName = (QualifiedName) importDeclaration.getName();
+				String className = qualifiedName.getName().getIdentifier();
+				imports.add(className);
+			}
+			else {
+				SimpleName simpleName = (SimpleName) importDeclaration.getName();
+				imports.add(simpleName.getIdentifier());
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Visits {@link QualifiedType} and trying to resolve binding.
+	 */
+	public boolean visit(QualifiedType qualifiedType) {
+		if (qualifiedType.resolveBinding() != null) {
+			String name = qualifiedType.getName().getFullyQualifiedName();
+			solveBinding(qualifiedType.resolveBinding(), name);
+			return true;
+		}
+		else {
+			Type qualifier = qualifiedType.getQualifier();
+			if (qualifier instanceof QualifiedType) {
+				if (visit((QualifiedType) qualifier)) {
+					printTypeError(qualifiedType.getName().getFullyQualifiedName(), qualifiedType.getStartPosition());
+				}
+			}
+			else {
+				if (visit((SimpleType) qualifier)) {
+					printTypeError(qualifiedType.getName().getFullyQualifiedName(), qualifiedType.getStartPosition());
+				}
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Visits {@link SimpleType} and trying to resolve binding.
+	 */
+	public boolean visit(SimpleType simpleType) {
+		if (simpleType.resolveBinding() != null) {
+			String name = simpleType.getName().getFullyQualifiedName(); 
+			solveBinding(simpleType.resolveBinding(), name );
+		}
+		else {
+			printTypeError(simpleType.getName().getFullyQualifiedName(), simpleType.getStartPosition());
+		}
+		return false;
+	}
+
+	/**
+	 * Visits {@link QualifiedName} and trying to resolve binding.
+	 */
+	public boolean visit(QualifiedName qualifiedName) {
+		if (qualifiedName.resolveBinding() != null) {
+			String name = qualifiedName.getFullyQualifiedName();
+			solveBinding(qualifiedName.resolveBinding(), name);
+			return true;
+		}
+		else {
+			Name qualifiedPart = qualifiedName.getQualifier();
+			if (qualifiedPart instanceof QualifiedName) {
+				if (visit((QualifiedName) qualifiedPart)) {
+					printTypeError(qualifiedName.getFullyQualifiedName(), qualifiedName.getStartPosition());
+				}
+				return false;
+			}
+			else {
+				if (qualifiedPart.resolveBinding() != null) {
+					printTypeError(qualifiedName.getFullyQualifiedName(), qualifiedName.getStartPosition());
+				}
+				else {
+					if (!isDeclaredVar(qualifiedPart.toString())) {
+						printTypeError(qualifiedPart.getFullyQualifiedName(), qualifiedPart.getStartPosition());
+					}
+				}
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Visits {@link MethodDeclaration} and trying to resolve binding.
+	 */
+	public boolean visit(MethodDeclaration method) {
+		List names = method.thrownExceptions();
+		if (names != null) {
+			Iterator iter = names.iterator();
+			while (iter.hasNext()) {
+				Name name = (Name) iter.next();
+				if (name.resolveBinding() != null) {
+					String nameStr = name.getFullyQualifiedName();
+					solveBinding(name.resolveBinding(), nameStr);
+				}
+				else {
+					printTypeError(name.getFullyQualifiedName(), name.getStartPosition());
+				}
+			}
+		}
+		return true;
+	}
+
+	/**
+	 * Visits {@link MethodInvocation} and trying to resolve binding.
+	 */
+	public boolean visit(MethodInvocation methodInvocation) {
+		Expression expr = methodInvocation.getExpression();
+		if (expr == null) {
+			if (methodInvocation.resolveMethodBinding() == null) {
+				printTypeError(methodInvocation.getName().getFullyQualifiedName(), methodInvocation.getStartPosition());
+			}
+		}
+		else {
+			if (expr.resolveTypeBinding() != null) {
+				String name = expr.toString();
+				solveBinding(expr.resolveTypeBinding(), name);
+			}
+			else {
+				if (expr instanceof MethodInvocation) {
+					visit((MethodInvocation) expr);
+				}
+				else if (expr instanceof QualifiedName) {
+					visit((QualifiedName) expr);
+				}
+				else if (expr instanceof SimpleName) {
+					if (!isDeclaredVar(expr.toString())) {
+						SimpleName simpleName = (SimpleName) expr;
+						printTypeError(simpleName.getFullyQualifiedName(), expr.getStartPosition());
+					}
+				}
+			}
+		}
+		return true;
+	}
+
+	/**
+	 * Visits {@link SingleVariableDeclaration} and adds variable name to the
+	 * list.
+	 */
+	public boolean visit(SingleVariableDeclaration declaration) {
+		vars.add(declaration.getName().toString());
+		return true;
+	}
+
+	/**
+	 * Visits {@link VariableDeclarationFragment} and adds variable name to the
+	 * list.
+	 */
+	public boolean visit(VariableDeclarationFragment declaration) {
+		vars.add(declaration.getName().toString());
+		return true;
+	}
+
+	/**
+	 * @param name
+	 *            simple name.
+	 * @return <code>true</code> if it is declared variable and
+	 *         <code>false</code> if not.
+	 */
+	private boolean isDeclaredVar(String name) {
+		return vars.contains(name);
+	}
+
+	/**
+	 * Prints error about not resolved name.
+	 * 
+	 * @param name
+	 *            not resolved name.
+	 * @param position
+	 *            start position in source file.
+	 */
+	private void printTypeError(String name, int position) {
+		if (!imports.contains(name)) {
+			out.error("The name '" + name + "' cannot be resolved.", unit.getLineNumber(position), unit.getColumnNumber(position));
+			wrongApiUsing = true;
+		}
+	}
+
+	/**
+	 * Prints error about not resolved import.
+	 * 
+	 * @param name
+	 *            import name.
+	 * @param position
+	 *            start position in source file.
+	 */
+	private void printImportError(String name, int position) {
+		wrongApiUsing = true;
+		out.error("The import '" + name + "' cannot be resolved.", unit.getLineNumber(position), unit.getColumnNumber(position));
+	}
+	
+	/**
+	 * Constructs Geronimo artifact name from repository library file.
+	 * 
+	 * @param libFullName
+	 *            full path to the repository library.
+	 * @return Geronimo artifact name.
+	 */
+	private String getGeronimoArtifactName(File libFullName) {
+		String fullName = libFullName.getAbsolutePath();
+		String geronimoRep = ToolConstants.GERONIMO_REPOSITORY_FOLDER + File.separator;
+		String name = fullName.substring(fullName.lastIndexOf(geronimoRep) + geronimoRep.length());
+		name = name.substring(0, name.indexOf(libFullName.getName()));
+		name = name.replace(File.separatorChar, ToolConstants.GERONIMO_SEPARATOR_CHAR);
+		String extension = fullName.substring(fullName.lastIndexOf('.') + 1);
+		return name + extension;
+	}
+	
+	/**
+	 * @return true if source uses proprietary api.
+	 */
+	public boolean isSourceValid(){
+		return !wrongApiUsing;
+	}
+	
+}
\ No newline at end of file

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/NodesVisitor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/NodesVisitor.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/NodesVisitor.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/class_analogies.properties
URL: http://svn.apache.org/viewvc/geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/class_analogies.properties?view=auto&rev=520023
==============================================================================
--- geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/class_analogies.properties (added)
+++ geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/class_analogies.properties Mon Mar 19 10:43:27 2007
@@ -0,0 +1,25 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+###########################################################################################################
+# Jboss classes and it's analogies. 
+###########################################################################################################
+org.jboss.security.SimplePrincipal = org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal
+org.jboss.security.auth.spi.DigestCallback = com.ibm.j2g.compatibility.DigestCallback
+org.jboss.security.Nobody = com.ibm.j2g.compatibility.Nobody
+org.jboss.security.Anybody = com.ibm.j2g.compatibility.Anybody
+org.jboss.security.auth.spi.UsernamePasswordLoginModule = com.ibm.j2g.compatibility.GeronimoLoginModule
+org.jboss.security.SimpleGroup = com.ibm.j2g.compatibility.GeronimoSimpleGroup
\ No newline at end of file

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/class_analogies.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/class_analogies.properties
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/class_analogies.properties
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/compatible_sources.properties
URL: http://svn.apache.org/viewvc/geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/compatible_sources.properties?view=auto&rev=520023
==============================================================================
--- geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/compatible_sources.properties (added)
+++ geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/compatible_sources.properties Mon Mar 19 10:43:27 2007
@@ -0,0 +1,25 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+######################################################################
+# List of compatibility sources 
+######################################################################
+com.ibm.j2g.compatibility.DigestCallback
+com.ibm.j2g.compatibility.Nobody
+com.ibm.j2g.compatibility.Anybody
+com.ibm.j2g.compatibility.GeronimoLoginModule
+com.ibm.j2g.compatibility.GeronimoSimpleGroup
+com.ibm.j2g.compatibility.PasswordHasher
\ No newline at end of file

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/compatible_sources.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/compatible_sources.properties
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/compatible_sources.properties
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/default_jars.properties
URL: http://svn.apache.org/viewvc/geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/default_jars.properties?view=auto&rev=520023
==============================================================================
--- geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/default_jars.properties (added)
+++ geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/default_jars.properties Mon Mar 19 10:43:27 2007
@@ -0,0 +1,35 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+######################################################################
+# List of default libraries for Geronimo AS. 
+######################################################################
+org/apache/geronimo/specs/geronimo-activation_1.0.2_spec/1.1/jar
+org/apache/geronimo/specs/geronimo-ejb_2.1_spec/1.0.1/jar
+org/apache/geronimo/specs/geronimo-j2ee-connector_1.5_spec/1.0.1/jar
+org/apache/geronimo/specs/geronimo-j2ee-deployment_1.1_spec/1.0.1/jar
+org/apache/geronimo/specs/geronimo-j2ee-jacc_1.0_spec/1.0.1/jar
+org/apache/geronimo/specs/geronimo-j2ee-management_1.0_spec/1.0.1/jar
+org/apache/geronimo/specs/geronimo-javamail_1.3.1_spec/1.1/jar
+org/apache/geronimo/specs/geronimo-jaxr_1.0_spec/1.0.1/jar
+org/apache/geronimo/specs/geronimo-jaxrpc_1.1_spec/1.0.1/jar
+org/apache/geronimo/specs/geronimo-jms_1.1_spec/1.0.1/jar
+org/apache/geronimo/specs/geronimo-jsp_2.0_spec/1.0.1/jar
+org/apache/geronimo/specs/geronimo-jta_1.0.1B_spec/1.0.1/jar
+org/apache/geronimo/specs/geronimo-qname_1.1_spec/1.0.1/jar
+org/apache/geronimo/specs/geronimo-saaj_1.1_spec/1.0.1/jar
+org/apache/geronimo/specs/geronimo-servlet_2.4_spec/1.0.1/jar
+tomcat/jasper-runtime/5.5.15/jar
\ No newline at end of file

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/default_jars.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/default_jars.properties
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/sandbox/j2g/src/dependence-plugin/src/org/apache/apps/j2gmigrator/source/dependence/default_jars.properties
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/j2g/src/descriptors-tool/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/geronimo/sandbox/j2g/src/descriptors-tool/META-INF/MANIFEST.MF?view=auto&rev=520023
==============================================================================
--- geronimo/sandbox/j2g/src/descriptors-tool/META-INF/MANIFEST.MF (added)
+++ geronimo/sandbox/j2g/src/descriptors-tool/META-INF/MANIFEST.MF Mon Mar 19 10:43:27 2007
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: J2G Descriptor Migration Tool Plug-in
+Bundle-SymbolicName: com.ibm.j2g.descriptors;singleton:=true
+Bundle-Version: 1.0.0
+Bundle-Vendor: IBM
+Bundle-Localization: plugin
+Require-Bundle: com.ibm.j2g,
+ org.eclipse.core.runtime,
+ org.eclipse.jdt.core

Added: geronimo/sandbox/j2g/src/descriptors-tool/build.properties
URL: http://svn.apache.org/viewvc/geronimo/sandbox/j2g/src/descriptors-tool/build.properties?view=auto&rev=520023
==============================================================================
--- geronimo/sandbox/j2g/src/descriptors-tool/build.properties (added)
+++ geronimo/sandbox/j2g/src/descriptors-tool/build.properties Mon Mar 19 10:43:27 2007
@@ -0,0 +1,21 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+ source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml

Propchange: geronimo/sandbox/j2g/src/descriptors-tool/build.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/j2g/src/descriptors-tool/build.properties
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/sandbox/j2g/src/descriptors-tool/build.properties
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/j2g/src/descriptors-tool/plugin.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/j2g/src/descriptors-tool/plugin.xml?view=auto&rev=520023
==============================================================================
--- geronimo/sandbox/j2g/src/descriptors-tool/plugin.xml (added)
+++ geronimo/sandbox/j2g/src/descriptors-tool/plugin.xml Mon Mar 19 10:43:27 2007
@@ -0,0 +1,30 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+ <?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension-point id="migrations" name="Descriptors Migrations Extension Point" schema="schema/tool.migrations.exsd"/>
+   <extension
+         id="tool"
+         name="Descriptors Migration Tool"
+         point="org.eclipse.core.runtime.applications">
+      <application>
+         <run class="com.ibm.j2g.descriptors.DescriptorsTool"/>
+      </application>
+   </extension>
+
+</plugin>



Mime
View raw message