You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by dy...@apache.org on 2007/10/04 19:22:09 UTC

svn commit: r581971 - in /db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui: ./ src/org/apache/derby/ui/common/ src/org/apache/derby/ui/container/ src/org/apache/derby/ui/popup/actions/ src/org/apache/derby/ui/util/

Author: dyre
Date: Thu Oct  4 10:22:05 2007
New Revision: 581971

URL: http://svn.apache.org/viewvc?rev=581971&view=rev
Log:
DERBY-1931: Derby JAR files should be grouped as a single library in Package Explorer
Contributed by Aaron Tarter


Added:
    db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/container/
    db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/container/DerbyClasspathContainer.java   (with props)
    db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/container/DerbyClasspathContainerInitializer.java   (with props)
Modified:
    db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/plugin.xml
    db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/common/Messages.java
    db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/popup/actions/AddDerbyNature.java
    db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/popup/actions/RemoveDerbyNature.java
    db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/util/DerbyUtils.java

Modified: db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/plugin.xml
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/plugin.xml?rev=581971&r1=581970&r2=581971&view=diff
==============================================================================
--- db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/plugin.xml (original)
+++ db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/plugin.xml Thu Oct  4 10:22:05 2007
@@ -421,4 +421,9 @@
             configTypeID="org.apache.derby.ui.sysinfoDerbyLaunchConfigurationType"
             id="org.apache.derby.ui.sysinfoDerbyLaunchConfigurationTypeImage"/>
    </extension>
+   <extension point="org.eclipse.jdt.core.classpathContainerInitializer">
+      <classpathContainerInitializer
+            id="DERBY_CONTAINER"
+            class="org.apache.derby.ui.container.DerbyClasspathContainerInitializer"/>
+   </extension>
 </plugin>

Modified: db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/common/Messages.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/common/Messages.java?rev=581971&r1=581970&r2=581971&view=diff
==============================================================================
--- db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/common/Messages.java (original)
+++ db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/common/Messages.java Thu Oct  4 10:22:05 2007
@@ -45,4 +45,6 @@
 	
 	public static String NO_ACTION="Unable to execute the action";
 	public static String SERVER_RUNNING="The Network Server is already running.\nStop the server prior to changing the settings.";
+	
+	public static String DERBY_CONTAINER_DESC = "Derby Libraries";
 }

Added: db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/container/DerbyClasspathContainer.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/container/DerbyClasspathContainer.java?rev=581971&view=auto
==============================================================================
--- db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/container/DerbyClasspathContainer.java (added)
+++ db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/container/DerbyClasspathContainer.java Thu Oct  4 10:22:05 2007
@@ -0,0 +1,80 @@
+/*
+
+  Derby - Class org.apache.derby.ui.container.DerbyClasspathContainer
+
+  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.derby.ui.container;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+
+import org.apache.derby.ui.common.CommonNames;
+import org.apache.derby.ui.common.Messages;
+import org.apache.derby.ui.util.Logger;
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jdt.core.IClasspathContainer;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.JavaCore;
+import org.osgi.framework.Bundle;
+
+public class DerbyClasspathContainer implements IClasspathContainer {
+    public static final Path CONTAINER_ID = new Path("DERBY_CONTAINER"); //$NON-NLS-1$
+    private IClasspathEntry[] _entries;
+   
+    public DerbyClasspathContainer() {
+        List<IClasspathEntry> entries = new ArrayList<IClasspathEntry>();
+        Bundle bundle = Platform.getBundle(CommonNames.CORE_PATH);
+        Enumeration en = bundle.findEntries("/", "*.jar", true);
+        String rootPath = null;
+        try { 
+            rootPath = FileLocator.resolve(FileLocator.find(bundle, new Path("/"), null)).getPath();
+        } catch(IOException e) {
+            Logger.log(e.getMessage(), IStatus.ERROR);
+        }
+        while(en.hasMoreElements()) {
+            IClasspathEntry cpe = JavaCore.newLibraryEntry(new Path(rootPath+'/'+((URL)en.nextElement()).getFile()), null, null);
+            entries.add(cpe);
+        }    
+        IClasspathEntry[] cpes = new IClasspathEntry[entries.size()];
+        _entries = (IClasspathEntry[])entries.toArray(cpes);
+    }
+
+    public IClasspathEntry[] getClasspathEntries() {      
+        return _entries;       
+    }
+
+    public String getDescription() {
+        return Messages.DERBY_CONTAINER_DESC;
+    }
+
+    public int getKind() {
+        return K_APPLICATION;
+    }
+
+    public IPath getPath() {
+        return CONTAINER_ID;
+    }
+}

Propchange: db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/container/DerbyClasspathContainer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/container/DerbyClasspathContainerInitializer.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/container/DerbyClasspathContainerInitializer.java?rev=581971&view=auto
==============================================================================
--- db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/container/DerbyClasspathContainerInitializer.java (added)
+++ db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/container/DerbyClasspathContainerInitializer.java Thu Oct  4 10:22:05 2007
@@ -0,0 +1,39 @@
+/*
+
+  Derby - Class org.apache.derby.ui.container.DerbyClasspathContainerInitializer
+
+  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.derby.ui.container;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jdt.core.ClasspathContainerInitializer;
+import org.eclipse.jdt.core.IClasspathContainer;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+
+public class DerbyClasspathContainerInitializer 
+    extends ClasspathContainerInitializer {
+    @Override
+    public void initialize(IPath containerPath, IJavaProject project)
+        throws CoreException {
+        IClasspathContainer container = new DerbyClasspathContainer();
+        JavaCore.setClasspathContainer(containerPath, new IJavaProject[] {project}, new IClasspathContainer[] {container}, null);
+    }
+}

Propchange: db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/container/DerbyClasspathContainerInitializer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/popup/actions/AddDerbyNature.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/popup/actions/AddDerbyNature.java?rev=581971&r1=581970&r2=581971&view=diff
==============================================================================
--- db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/popup/actions/AddDerbyNature.java (original)
+++ db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/popup/actions/AddDerbyNature.java Thu Oct  4 10:22:05 2007
@@ -21,9 +21,12 @@
 
 package org.apache.derby.ui.popup.actions;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.derby.ui.common.CommonNames;
 import org.apache.derby.ui.common.Messages;
-import org.apache.derby.ui.util.DerbyUtils;
+import org.apache.derby.ui.container.DerbyClasspathContainer;
 import org.apache.derby.ui.util.Logger;
 import org.apache.derby.ui.util.SelectionUtil;
 import org.eclipse.core.resources.IProject;
@@ -113,9 +116,16 @@
             IClasspathEntry[] rawClasspath = currentJavaProject
                     .getRawClasspath();
 
-            currentJavaProject.setRawClasspath(DerbyUtils
-                    .addDerbyJars(rawClasspath), null);
-
+            List<IClasspathEntry> newEntries = new ArrayList<IClasspathEntry>(rawClasspath.length+1);            
+            for(IClasspathEntry e: rawClasspath) {
+            	newEntries.add(e);
+            }            
+            newEntries.add(JavaCore.newContainerEntry(DerbyClasspathContainer.CONTAINER_ID));
+            
+            IClasspathEntry[] newEntriesArray = new IClasspathEntry[newEntries.size()];
+            newEntriesArray = (IClasspathEntry[])newEntries.toArray(newEntriesArray);
+            currentJavaProject.setRawClasspath(newEntriesArray, null);
+                    
             // refresh project so user sees new files, libraries, etc
             currentJavaProject.getProject().refreshLocal(
                     IResource.DEPTH_INFINITE, null);

Modified: db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/popup/actions/RemoveDerbyNature.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/popup/actions/RemoveDerbyNature.java?rev=581971&r1=581970&r2=581971&view=diff
==============================================================================
--- db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/popup/actions/RemoveDerbyNature.java (original)
+++ db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/popup/actions/RemoveDerbyNature.java Thu Oct  4 10:22:05 2007
@@ -21,11 +21,12 @@
 package org.apache.derby.ui.popup.actions;
 
 import java.util.ArrayList;
+import java.util.List;
 
 import org.apache.derby.ui.common.CommonNames;
 import org.apache.derby.ui.common.Messages;
+import org.apache.derby.ui.container.DerbyClasspathContainer;
 import org.apache.derby.ui.util.DerbyServerUtils;
-import org.apache.derby.ui.util.DerbyUtils;
 import org.apache.derby.ui.util.Logger;
 import org.apache.derby.ui.util.SelectionUtil;
 import org.eclipse.core.resources.IProject;
@@ -86,7 +87,19 @@
 				DerbyServerUtils.getDefault().stopDerbyServer(currentJavaProject.getProject());
 			}
 			IClasspathEntry[] rawClasspath = currentJavaProject.getRawClasspath();
-			currentJavaProject.setRawClasspath(DerbyUtils.removeDerbyJars(rawClasspath), null);
+			
+			List<IClasspathEntry> newEntries = new ArrayList<IClasspathEntry>();
+			for(IClasspathEntry e: rawClasspath) {
+				if(e.getEntryKind()!=IClasspathEntry.CPE_CONTAINER) {
+					newEntries.add(e);
+				} else if(!e.getPath().equals(DerbyClasspathContainer.CONTAINER_ID)) {
+					newEntries.add(e);
+				}
+			}
+			
+			IClasspathEntry[] newEntriesArray = new IClasspathEntry[newEntries.size()];
+			newEntriesArray = (IClasspathEntry[])newEntries.toArray(newEntriesArray);			
+			currentJavaProject.setRawClasspath(newEntriesArray, null);
 			
 			IProjectDescription description = currentJavaProject.getProject().getDescription();
 			String[] natures = description.getNatureIds();

Modified: db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/util/DerbyUtils.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/util/DerbyUtils.java?rev=581971&r1=581970&r2=581971&view=diff
==============================================================================
--- db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/util/DerbyUtils.java (original)
+++ db/derby/code/trunk/plugins/eclipse/org.apache.derby.ui/src/org/apache/derby/ui/util/DerbyUtils.java Thu Oct  4 10:22:05 2007
@@ -21,7 +21,6 @@
 
 package org.apache.derby.ui.util;
 
-import java.io.File;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.List;
@@ -32,7 +31,6 @@
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.FileLocator;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
@@ -44,8 +42,6 @@
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
 import org.eclipse.debug.core.ILaunchManager;
 import org.eclipse.debug.core.model.IProcess;
-import org.eclipse.jdt.core.IClasspathEntry;
-import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
 import org.eclipse.jdt.launching.IRuntimeClasspathEntry;
 import org.eclipse.jdt.launching.JavaRuntime;
@@ -57,119 +53,10 @@
 
 
 public class DerbyUtils {
-	private final static String PLUGIN_ROOT = "ECLIPSE_HOME/plugins/";
 	
 	private static ManifestElement[] getElements(String bundleName) throws BundleException {
 		String requires = (String)Platform.getBundle(bundleName).getHeaders().get(Constants.BUNDLE_CLASSPATH);
 		return ManifestElement.parseHeader(Constants.BUNDLE_CLASSPATH, requires);
-	}
-	public static IClasspathEntry[] addDerbyJars(IClasspathEntry[] rawCP) throws Exception{
-		
-		IClasspathEntry[] newRawCP= null;
-		try{
-			//New OSGI way
-			ManifestElement[] elements_core, elements_ui;
-			elements_core = getElements(CommonNames.CORE_PATH);
-			elements_ui=getElements(CommonNames.UI_PATH);
-			
-			Bundle bundle=Platform.getBundle(CommonNames.CORE_PATH);
-			URL pluginURL = FileLocator.resolve(FileLocator.find(bundle, new Path("/"), null));
-			String pluginName = new File(pluginURL.getPath()).getName();
-
-			newRawCP=new IClasspathEntry[rawCP.length + (elements_core.length) + (elements_ui.length-1)];
-			System.arraycopy(rawCP, 0, newRawCP, 0, rawCP.length);
-			
-			//Add the CORE jars
-			int oldLength=rawCP.length;
-			for(int i=0;i<elements_core.length;i++){
-				// add JAR as var type entry relative to the eclipse plugins dir, so the entry is portable 
-				newRawCP[oldLength+i]=JavaCore.newVariableEntry(new Path(PLUGIN_ROOT+pluginName+"/"+elements_core[i].getValue()), null, null);				
-				
-			}
-			 // Add the UI jars
-			bundle=Platform.getBundle(CommonNames.UI_PATH);
-			pluginURL = FileLocator.resolve(FileLocator.find(bundle, new Path("/"), null));
-			pluginName = new File(pluginURL.getPath()).getName();
-			oldLength=oldLength+elements_core.length -1; 
-			for(int i=0;i<elements_ui.length;i++){
-				if(!(elements_ui[i].getValue().toLowerCase().equals("ui.jar"))){
-					// add JAR as var type entry relative to the eclipse plugins dir, so the entry is portable
-					newRawCP[oldLength+i]=JavaCore.newVariableEntry(new Path(PLUGIN_ROOT+pluginName+"/"+elements_ui[i].getValue()), null, null);
-				}
-			}					
-			return newRawCP;
-		}catch(Exception e){
-			throw e;
-		}
-		
-	}
-	public static IClasspathEntry[] removeDerbyJars(IClasspathEntry[] rawCP) throws Exception{
-		ArrayList arrL=new ArrayList();
-		for (int i=0;i<rawCP.length;i++){
-			arrL.add(rawCP[i]);
-		}
-		IClasspathEntry[] newRawCP= null;
-		try{
-			ManifestElement[] elements_core, elements_ui;
-			elements_core = getElements(CommonNames.CORE_PATH);
-			elements_ui=getElements(CommonNames.UI_PATH);
-			
-			Bundle bundle;
-			URL pluginURL,jarURL,localURL;
-
-			boolean add;
-			IClasspathEntry icp=null;
-			for (int j=0;j<arrL.size();j++){
-				bundle=Platform.getBundle(CommonNames.CORE_PATH);
-				pluginURL = bundle.getEntry("/");
-				add=true;
-				icp=(IClasspathEntry)arrL.get(j);
-				//remove 'core' jars
-				for (int i=0;i<elements_core.length;i++){
-					jarURL= new URL(pluginURL,elements_core[i].getValue());
-					localURL=Platform.asLocalURL(jarURL);
-					if(((icp).equals(JavaCore.newLibraryEntry(new Path(localURL.getPath()), null, null)))||
-							icp.getPath().toString().toLowerCase().endsWith("derby.jar")||
-							icp.getPath().toString().toLowerCase().endsWith("derbynet.jar")||
-							icp.getPath().toString().toLowerCase().endsWith("derbyclient.jar")||
-							icp.getPath().toString().toLowerCase().endsWith("derbytools.jar")){
-						add=false;
-					}
-				}
-				if(!add){
-					arrL.remove(j);
-					j=j-1;
-				}
-				//REMOVE 'ui' jars
-				bundle=Platform.getBundle(CommonNames.UI_PATH);
-				pluginURL = bundle.getEntry("/");
-				add=true;
-				
-				for (int i=0;i<elements_ui.length;i++){
-					if(!(elements_ui[i].getValue().toLowerCase().equals("ui.jar"))){
-						jarURL= new URL(pluginURL,elements_ui[i].getValue());
-						localURL=Platform.asLocalURL(jarURL);					
-						if((icp).equals(JavaCore.newLibraryEntry(new Path(localURL.getPath()), null, null))){
-							add=false;
-						}
-					}
-				}
-				if(!add){
-					arrL.remove(j);
-					j=j-1;
-				}
-			}
-			newRawCP=new IClasspathEntry[arrL.size()];
-			for (int i=0;i<arrL.size();i++){
-				newRawCP[i]=(IClasspathEntry)arrL.get(i);
-			}
-			return newRawCP;
-		}catch(Exception e){
-			e.printStackTrace();
-			//return rawCP;
-			throw e;
-		}
-		
 	}
 	protected static ILaunch launch(IProject proj, String name, String mainClass, String args, String vmargs, String app) throws CoreException {	
 		ILaunchManager manager = DebugPlugin.getDefault().getLaunchManager();