diff --git a/rse/plugins/org.eclipse.rse.subsystems.files.core/schema/remoteFileTypes.exsd b/rse/plugins/org.eclipse.rse.subsystems.files.core/schema/remoteFileTypes.exsd index 13b359fe7a1..c15720707bb 100644 --- a/rse/plugins/org.eclipse.rse.subsystems.files.core/schema/remoteFileTypes.exsd +++ b/rse/plugins/org.eclipse.rse.subsystems.files.core/schema/remoteFileTypes.exsd @@ -60,6 +60,15 @@ Providers may provide an extension for this extension point. No code beyond the + + + + Priority used if there are more than one match of a file type. Integer values are allowed. +In case of more than one matching file type, the with lower priority number will be used. +If no priority is specified, the default value will be <code>Integer.MAX_VALUE</code>. + + + @@ -80,6 +89,7 @@ Providers may provide an extension for this extension point. No code beyond the <extension point="org.eclipse.rse.subsystems.files.core.remoteFileTypes"> <remoteFileTypes extension="txt" type="text"/> <remoteFileTypes extension="gif" type="binary"/> + <remoteFileTypes extension="exe" type="binary" priority="100"/> </extension> @@ -107,7 +117,7 @@ Providers may provide an extension for this extension point. No code beyond the - Copyright (c) 2006, 2007 IBM Corporation. All Rights Reserved. + Copyright (c) 2006, 2007 IBM Corporation. All Rights Reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html diff --git a/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/model/ISystemFileTransferModeMapping.java b/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/model/ISystemFileTransferModeMapping.java index 2011e6697f7..71d4445f308 100644 --- a/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/model/ISystemFileTransferModeMapping.java +++ b/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/model/ISystemFileTransferModeMapping.java @@ -11,7 +11,7 @@ * Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley. * * Contributors: - * {Name} (company) - description of contribution. + * David McKnight (IBM) - [208951] new priority field ********************************************************************************/ package org.eclipse.rse.subsystems.files.core.model; @@ -20,7 +20,6 @@ public interface ISystemFileTransferModeMapping { - /** * Get the extension * @@ -59,4 +58,11 @@ public interface ISystemFileTransferModeMapping { * @return true if text, false if binary */ public boolean isText(); + + + /** + * Gets the priority - the smaller the number, the higher priority + * @return the priority + */ + public int getPriority(); } \ No newline at end of file diff --git a/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/model/SystemFileTransferModeMapping.java b/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/model/SystemFileTransferModeMapping.java index dce9e199e30..cb92832131e 100644 --- a/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/model/SystemFileTransferModeMapping.java +++ b/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/model/SystemFileTransferModeMapping.java @@ -12,7 +12,7 @@ * Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley. * * Contributors: - * {Name} (company) - description of contribution. + * David McKnight (IBM) - [208951] new priority field *******************************************************************************/ package org.eclipse.rse.subsystems.files.core.model; @@ -24,9 +24,11 @@ package org.eclipse.rse.subsystems.files.core.model; public class SystemFileTransferModeMapping implements ISystemFileTransferModeMapping, Cloneable { + public static final int DEFAULT_PRIORITY = Integer.MAX_VALUE; private String name; private String extension; private boolean isBinary = true; + private int priority = DEFAULT_PRIORITY; /** * Constructor for SystemFileTransferModeMapping. The name is set to *. @@ -132,6 +134,23 @@ public class SystemFileTransferModeMapping implements ISystemFileTransferModeMap this.extension = extension; } + /** + * Set the priority - the smaller the number, the higher priority + * @param priority + */ + public void setPriority(int priority) { + this.priority = priority; + } + + /** + * Gets the priority - the smaller the number, the higher priority + * @return the priority + */ + public int getPriority() + { + return this.priority; + } + /** * Clone this object diff --git a/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/model/SystemFileTransferModeRegistry.java b/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/model/SystemFileTransferModeRegistry.java index 4bc9cd8e06a..e2b2dff2005 100644 --- a/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/model/SystemFileTransferModeRegistry.java +++ b/rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/model/SystemFileTransferModeRegistry.java @@ -15,7 +15,6 @@ * Martin Oberhuber (Wind River) - [168870] refactor org.eclipse.rse.core package of the UI plugin * David McKnight (IBM) - [208951] Use remoteFileTypes extension point to determine file types *******************************************************************************/ - package org.eclipse.rse.subsystems.files.core.model; import java.io.File; @@ -30,7 +29,6 @@ import java.util.Iterator; import java.util.List; import java.util.SortedSet; import java.util.TreeSet; -import java.util.Vector; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.IConfigurationElement; @@ -69,8 +67,7 @@ public class SystemFileTransferModeRegistry implements ISystemFileTransferModeRe private static final String MODE_ATTRIBUTE = "mode"; //$NON-NLS-1$ private static final String BINARY_VALUE = "binary"; //$NON-NLS-1$ private static final String TEXT_VALUE = "text"; //$NON-NLS-1$ - - + private static final String PRIORITY_ATTRIBUTE = "priority"; /** * Constructor for SystemFileTransferModeRegistry @@ -112,11 +109,6 @@ public class SystemFileTransferModeRegistry implements ISystemFileTransferModeRe loadAssociations(); - // lists to hold the information from the extensions to our - // extension point - Vector extTextList = new Vector(); - Vector extBinaryList = new Vector(); - // get reference to the extension registry IExtensionRegistry extRegistry = Platform.getExtensionRegistry(); @@ -136,67 +128,58 @@ public class SystemFileTransferModeRegistry implements ISystemFileTransferModeRe String type = element.getAttribute("type"); //$NON-NLS-1$ if (type != null && !type.equals("")) { //$NON-NLS-1$ - + + SystemFileTransferModeMapping mapping = new SystemFileTransferModeMapping(extension); + // add extension to list of text types if (type.equalsIgnoreCase("text")) { //$NON-NLS-1$ - - // if the extension is not already part of our text - // types list - if (!extTextList.contains(extension)) { - - // add to list - extTextList.add(extension); - } + mapping.setAsText(); } // add extension to list of binary types if (type.equalsIgnoreCase("binary")) { //$NON-NLS-1$ - - // if the extension is not already part of our - // binary types list - if (!extBinaryList.contains(extension)) { - - // add to list - extBinaryList.add(extension); + mapping.setAsBinary(); + } + + int priority = SystemFileTransferModeMapping.DEFAULT_PRIORITY; + String priorityStr = element.getAttribute("priority"); + try + { + if (priorityStr != null && !priorityStr.equals("")){ + priority = Integer.parseInt(priorityStr); } } + catch (Exception e) + { + } + mapping.setPriority(priority); + + String key = getMappingKey(mapping); + if (!typeModeMappings.containsKey(key)){ + typeModeMappings.put(key, mapping); + } else { - continue; + SystemFileTransferModeMapping existingMapping = (SystemFileTransferModeMapping)typeModeMappings.get(key); + int existingPriority = existingMapping.getPriority(); + if (priority < existingPriority){ + + // change properties of existing mapping to that of new priority + if (mapping.isBinary() && existingMapping.isText()){ + existingMapping.setAsBinary(); + } + else if (mapping.isText() && existingMapping.isBinary()){ + existingMapping.setAsText(); + } + + existingMapping.setPriority(priority); + } } } + } else { continue; } - } - - // add text extension to the mappings list - for (int t = 0; t < extTextList.size(); t++) - { - String extension = (String)extTextList.get(t); - SystemFileTransferModeMapping mapping = new SystemFileTransferModeMapping(extension); - - String key = getMappingKey(mapping); - if (!typeModeMappings.containsKey(key)) - { - mapping.setAsText(); - typeModeMappings.put(key, mapping); - } - } - - // add binary extension to the mappings list - for (int b = 0; b < extBinaryList.size(); b++) - { - String extension = (String)extBinaryList.get(b); - SystemFileTransferModeMapping mapping = new SystemFileTransferModeMapping(extension); - - - String key = getMappingKey(mapping); - if (!typeModeMappings.containsKey(key)) - { - mapping.setAsBinary(); - typeModeMappings.put(key, mapping); - } - } + } } /** @@ -463,6 +446,7 @@ public class SystemFileTransferModeRegistry implements ISystemFileTransferModeRe String extension = mementos[i].getString(EXTENSION_ATTRIBUTE); String mode = mementos[i].getString(MODE_ATTRIBUTE); + SystemFileTransferModeMapping mapping = new SystemFileTransferModeMapping(name, extension); if (mode.equals(TEXT_VALUE)) { @@ -472,6 +456,19 @@ public class SystemFileTransferModeRegistry implements ISystemFileTransferModeRe mapping.setAsBinary(); } + try + { + Integer priorityInt = mementos[i].getInteger(PRIORITY_ATTRIBUTE); + if (priorityInt != null){ + int priority = priorityInt.intValue(); + mapping.setPriority(priority); + } + } + catch (Exception e) + { + } + + typeModeMappings.put(getMappingKey(mapping), mapping); } @@ -521,6 +518,7 @@ public class SystemFileTransferModeRegistry implements ISystemFileTransferModeRe infoMemento.putString(NAME_ATTRIBUTE, mapping.getName()); infoMemento.putString(EXTENSION_ATTRIBUTE, mapping.getExtension()); infoMemento.putString(MODE_ATTRIBUTE, mapping.isBinary() ? BINARY_VALUE : TEXT_VALUE); + infoMemento.putInteger(PRIORITY_ATTRIBUTE, mapping.getPriority()); } FileOutputStream stream = null;