java.util.Enumeration enum = System.getProperties().keys(); String key = null; while (enum.hasMoreElements()){ key = (String)enum.nextElement(); System.out.print(key); for (int i =0;i<(30-key.length());i++)System.out.print(" "); System.out.println("->"+System.getProperty(key)); } new java.net.URL("file://C:/temp/org.eclipse.update.core.feature1_1.0.0/org.eclipse.update.core.feature1.plugin1_1.1.1.jar").openStream() (new java.io.File("C:\\chris chris\hello\\")).mkdirs(); java.net.URL a = new java.net.URL("http","www.oti.com","/feature/blah.jar"); java.net.URL b = new java.net.URL("jar",null,a.toExternalForm()+"!/hello.txt"); b new java.net.URL("file",null,System.getProperty("java.io.tmpdir")); new java.net.URL("file",null,System.getProperty("user.home")); String tempDir = "c:\\TEMP\\features2.jar"; java.net.URL TEMP_SITE = new java.net.URL("file",null,tempDir); java.net.URL file = new java.net.URL("jar",null,TEMP_SITE.toExternalForm()+"!/feature.xml"); file.openStream(); file java.io.File f = new java.io.File("c:\\temp\\xtf\\file.jar"); f.mkdirs() java.util.Locale.getDefault() java.util.ResourceBundle java.net.URL url = new java.net.URL("file",null,"C:\\path"+java.io.File.separator); url.getPath().endsWith("/"); url java.net.URL url = new java.net.URL("http://machine:8080/path space/file.abc#hello"); java.net.URL url2 = new java.net.URL(url,"/ "); url2.getPath() java.lang.ClassLoader l = new java.net.URLClassLoader(new java.net.URL[] {new java.net.URL("file",null,"c:\\oti\\wsw205\\eclipse\\install\\features\\org.eclipse.help.feature_1.0.4/") }, null); java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("feature", java.util.Locale.getDefault(), l); bundle String[] ss = {"a", "b"}; java.util.List list = new java.util.ArrayList(0); list.addAll(java.util.Arrays.asList(ss)); list.add("c"); list.size(); java.util.List list = new java.util.ArrayList(0); list.add("1"); list.add("2"); list.add("3"); list.add("4"); list.add("5"); list.add("6"); list.add("7"); while (list.size()>5){ list.remove(0); } list.get(0) org.eclipse.update.internal.security.KeyStores k = new org.eclipse.update.internal.security.KeyStores(); while (k.hasNext()){ org.eclipse.update.internal.security.KeystoreHandle handle = (org.eclipse.update.internal.security.KeystoreHandle) k.next(); System.out.println("KeyStore:"+handle.getLocation()+":"+handle.getType()); } int i = (13/3); i ***************************************** OLD Feature Code /** */ private void downloadArchivesLocally(ISite tempSite, String[] archiveIDToInstall, IProgressMonitor monitor) throws CoreException, IOException { URL sourceURL; String newFile; URL newURL; if (monitor != null) { monitor.beginTask("Download archives bundles to Temporary Space", archiveIDToInstall.length); } for (int i = 0; i < archiveIDToInstall.length; i++) { // transform the id by asking the site to map them to real URL inside the SITE if (getSite() != null) { sourceURL = getSite().getSiteContentProvider().getArchivesReferences(archiveIDToInstall[i]); if (monitor != null) { monitor.subTask("..." + archiveIDToInstall[i]); } // the name of the file in the temp directory // should be the regular plugins/pluginID_ver as the Temp site is OUR site newFile = Site.DEFAULT_PLUGIN_PATH + archiveIDToInstall[i]; newURL = UpdateManagerUtils.resolveAsLocal(sourceURL, newFile, monitor); // transfer the possible mapping to the temp site ((Site) tempSite).addArchive(new URLEntry(archiveIDToInstall[i], newURL)); if (monitor != null) { monitor.worked(1); if (monitor.isCanceled()) { throw CANCEL_EXCEPTION; } } } } // the site of this feature now becomes the TEMP directory // FIXME: make sure there is no other issue // like asking for stuff that hasn't been copied // or reusing this feature // of having an un-manageable temp site this.setSite(tempSite); } /** */ private void downloadDataLocally(IFeature targetFeature, INonPluginEntry[] dataToInstall, IProgressMonitor monitor) throws CoreException, IOException { URL sourceURL; // any other data INonPluginEntry[] entries = getNonPluginEntries(); if (entries != null) { if (monitor != null) { monitor.beginTask("Installing Other Data information", dataToInstall.length); if (monitor.isCanceled()) { throw CANCEL_EXCEPTION; } } for (int j = 0; j < entries.length; j++) { String name = dataToInstall[j].getIdentifier(); if (monitor != null) { monitor.subTask("..." + name); } // the id is URL format with "/" String dataEntryId = Site.DEFAULT_FEATURE_PATH + getIdentifier().toString() + "/" + name; // transform the id by asking the site to map them to real URL inside the SITE if (getSite() != null) { sourceURL = getSite().getSiteContentProvider().getArchivesReferences(dataEntryId); ((Site) targetFeature.getSite()).storeFeatureInfo(getIdentifier(), name, sourceURL.openStream()); if (monitor != null) { monitor.worked(1); if (monitor.isCanceled()) { throw CANCEL_EXCEPTION; } } }// getSite==null } } } /** * Method install. * @param targetFeature * @param monitor * @throws CoreException */ public void old_install(IFeature targetFeature, IProgressMonitor monitor) throws CoreException { IPluginEntry[] sourceFeaturePluginEntries = getPluginEntries(); IPluginEntry[] targetSitePluginEntries = targetFeature.getSite().getPluginEntries(); Site tempSite = (Site) SiteManager.getTempSite(); // determine list of plugins to install // find the intersection between the two arrays of IPluginEntry... // The one teh site contains and teh one the feature contains IPluginEntry[] pluginsToInstall = intersection(sourceFeaturePluginEntries, targetSitePluginEntries); // private abstract - Determine list of content references id /archives id /bundles id that // map the list of plugins to install String[] archiveIDToInstall = getContentReferenceToInstall(pluginsToInstall); try { // download and install data bundles // before we set the site of teh feature to the TEMP site INonPluginEntry[] dataEntries = getNonPluginEntries(); if (dataEntries.length > 0) { downloadDataLocally(targetFeature, dataEntries, monitor); } // optmization, may be private to implementation // copy *blobs/content references/archives/bundles* in TEMP space if (((Site) getSite()).optimize()) { if (archiveIDToInstall != null) { downloadArchivesLocally(tempSite, archiveIDToInstall, monitor); } } // obtain the list of *Streamable Storage Unit* // from the archive if (monitor != null) { int total = pluginsToInstall == null ? 1 : pluginsToInstall.length + 1; monitor.beginTask("Install feature " + getLabel(), total); } if (pluginsToInstall != null) { InputStream inStream = null; for (int i = 0; i < pluginsToInstall.length; i++) { if (monitor != null) { monitor.subTask("Installing plug-in: " + pluginsToInstall[i]); if (monitor.isCanceled()) { throw CANCEL_EXCEPTION; } } open(pluginsToInstall[i]); String[] names = getStorageUnitNames(pluginsToInstall[i]); if (names != null) { for (int j = 0; j < names.length; j++) { if ((inStream = getInputStreamFor(pluginsToInstall[i], names[j])) != null) targetFeature.store(pluginsToInstall[i], names[j], inStream); } } close(pluginsToInstall[i]); if (monitor != null) { monitor.worked(1); if (monitor.isCanceled()) { throw CANCEL_EXCEPTION; } } } } // install the Feature info InputStream inStream = null; String[] names = getStorageUnitNames(this); if (names != null) { openFeature(); if (monitor != null) { monitor.subTask("Installing Feature information"); if (monitor.isCanceled()) { throw CANCEL_EXCEPTION; } } for (int j = 0; j < names.length; j++) { if ((inStream = getInputStreamFor(this, names[j])) != null) ((Site) targetFeature.getSite()).storeFeatureInfo(getIdentifier(), names[j], inStream); } closeFeature(); if (monitor != null) { monitor.worked(1); if (monitor.isCanceled()) { throw CANCEL_EXCEPTION; } } } } catch (IOException e) { String id = UpdateManagerPlugin.getPlugin().getDescriptor().getUniqueIdentifier(); IStatus status = new Status(IStatus.ERROR, id, IStatus.OK, "Error during Install", e); throw new CoreException(status); } finally { //do not clean up TEMP drive // as other feature may be there... clean up when exiting the plugin } } /** * @see IPluginContainer#store(IPluginEntry, String, InputStream) */ public void store(IPluginEntry pluginEntry, String contentKey, InputStream inStream) throws CoreException { // check if pluginEntry already exists before passing to the site // anything else ? boolean found = false; int i = 0; IPluginEntry[] entries = getPluginEntries(); while (i < entries.length && !found) { if (entries[i].equals(pluginEntry)) { found = true; } i++; } if (!found) { String id = UpdateManagerPlugin.getPlugin().getDescriptor().getUniqueIdentifier(); IStatus status = new Status(IStatus.ERROR, id, IStatus.OK, "The plugin:" + pluginEntry.getIdentifier().toString() + " is not part of the plugins of the feature:" + this.getIdentifier().toString(), null); throw new CoreException(status); } getSite().store(pluginEntry, contentKey, inStream); } /** * perform pre processing before opening a plugin archive * @param entry the plugin about to be opened */ protected void open(IPluginEntry entry) { }; /** * perform post processing to close a plugin archive * @param entry the plugin about to be closed */ protected void close(IPluginEntry entry) throws IOException { }; /** * perform pre processing before opening the feature archive */ protected void openFeature() { }; /** * perform post processing to close a feature archive */ public void closeFeature() throws IOException { }; /** * return the list of FILE to be transfered for a Plugin */ protected abstract String[] getStorageUnitNames(IPluginEntry pluginEntry) throws CoreException; /** * return the list of FILE to be transfered from within the Feature */ protected abstract String[] getStorageUnitNames(IFeature feature) throws CoreException; /** * return the Stream of the FILE to be transfered for a Plugin */ protected abstract InputStream getInputStreamFor(IPluginEntry pluginEntry, String name) throws CoreException; /** * return the Stream of FILE to be transfered from within the Feature */ protected abstract InputStream getInputStreamFor(IFeature feature, String name) throws IOException, CoreException; /** * returns the list of archive to transfer/install * in order to install the list of plugins * * @param pluginsToInstall list of plugin to install */ protected abstract String[] getContentReferenceToInstall(IPluginEntry[] pluginsToInstall); /** * remove myself... */ public void old_remove(IProgressMonitor monitor) throws CoreException { // remove the feature and the plugins if they are not used and not activated // get the plugins from the feature IPluginEntry[] pluginsToRemove = ((SiteLocal) SiteManager.getLocalSite()).getDeltaPluginEntries(this); try { // obtain the list of *Streamable Storage Unit* // from the archive if (monitor != null) { int total = pluginsToRemove == null ? 1 : pluginsToRemove.length + 1; monitor.beginTask("Uninstall feature " + getLabel(), total); } if (pluginsToRemove != null) { for (int i = 0; i < pluginsToRemove.length; i++) { if (monitor != null) { monitor.subTask("Removing plug-in: " + pluginsToRemove[i]); if (monitor.isCanceled()) { throw CANCEL_EXCEPTION; } } remove(pluginsToRemove[i]); if (monitor != null) { monitor.worked(1); if (monitor.isCanceled()) { throw CANCEL_EXCEPTION; } } } } // remove the Feature info String[] names = getStorageUnitNames(this); if (names != null) { if (monitor != null) { monitor.subTask("Removing Feature information"); if (monitor.isCanceled()) { throw CANCEL_EXCEPTION; } } ((Site) this.getSite()).removeFeatureInfo(getIdentifier()); closeFeature(); if (monitor != null) { monitor.worked(1); if (monitor.isCanceled()) { throw CANCEL_EXCEPTION; } } } } catch (IOException e) { String id = UpdateManagerPlugin.getPlugin().getDescriptor().getUniqueIdentifier(); IStatus status = new Status(IStatus.ERROR, id, IStatus.OK, "Error during Uninstall", e); throw new CoreException(status); } } System.getProperty("java.io.tmpdir")(java.lang.String) /tmp true^false true^true org.eclipse.core.runtime.IPath p1= (new org.eclipse.core.runtime.Path("/path1/path2/*.txt")); org.eclipse.core.runtime.IPath p2= (new org.eclipse.core.runtime.Path("/path1/path2/a.txt")); p1.equals(p2); org.eclipse.update.internal.core.URLEncoder.encode(new java.net.URL("http://www.ourwebsite.com/servlet/update?jar=somefeaturejarfile"));(java.net.URL) http://www.ourwebsite.com/servlet/update?jar=somefeaturejarfile