mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-25 18:05:33 +02:00
Bug 161936: [dstore-win] Cannot create remote file
This commit is contained in:
parent
4cad0226b2
commit
60c390b79e
2 changed files with 65 additions and 2 deletions
|
@ -236,9 +236,28 @@ public class SystemNewFileWizard
|
||||||
*/
|
*/
|
||||||
protected boolean meetsFilterCriteria(ISystemFilterReference selectedFilterRef, IRemoteFile parentFolder, String newAbsName)
|
protected boolean meetsFilterCriteria(ISystemFilterReference selectedFilterRef, IRemoteFile parentFolder, String newAbsName)
|
||||||
{
|
{
|
||||||
boolean meets = false;
|
|
||||||
IRemoteFileSubSystem parentSubSystem = (IRemoteFileSubSystem)selectedFilterRef.getSubSystem();
|
IRemoteFileSubSystem parentSubSystem = (IRemoteFileSubSystem)selectedFilterRef.getSubSystem();
|
||||||
meets = parentSubSystem.doesFilterMatch(selectedFilterRef.getReferencedFilter(),newAbsName);
|
|
||||||
|
ISystemFilter filter = selectedFilterRef.getReferencedFilter();
|
||||||
|
|
||||||
|
// if the filter is "*", this represents the Drives filter on Windows
|
||||||
|
// we can not create a file directly under it since it doesn't actually represent a container
|
||||||
|
// if we create a new file or folder by right clicking on this filter, the parent folder defaults to the first drive
|
||||||
|
// that shows up when this filter is resolved. Hence we ignore this filter from the filter matching criteria
|
||||||
|
String[] strings = filter.getFilterStrings();
|
||||||
|
|
||||||
|
if (strings != null) {
|
||||||
|
|
||||||
|
for (int idx = 0; idx < strings.length; idx++) {
|
||||||
|
|
||||||
|
if (strings[idx].equals("*")) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean meets = parentSubSystem.doesFilterMatch(filter, newAbsName);
|
||||||
|
|
||||||
if (!meets)
|
if (!meets)
|
||||||
{
|
{
|
||||||
SystemMessage msg = RSEUIPlugin.getPluginMessage(ISystemMessages.FILEMSG_CREATE_RESOURCE_NOTVISIBLE);
|
SystemMessage msg = RSEUIPlugin.getPluginMessage(ISystemMessages.FILEMSG_CREATE_RESOURCE_NOTVISIBLE);
|
||||||
|
|
|
@ -32,9 +32,12 @@ import java.util.List;
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
|
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
import org.eclipse.core.runtime.OperationCanceledException;
|
import org.eclipse.core.runtime.OperationCanceledException;
|
||||||
|
import org.eclipse.core.runtime.Path;
|
||||||
import org.eclipse.rse.core.SystemBasePlugin;
|
import org.eclipse.rse.core.SystemBasePlugin;
|
||||||
|
import org.eclipse.rse.core.filters.ISystemFilter;
|
||||||
import org.eclipse.rse.core.filters.ISystemFilterReference;
|
import org.eclipse.rse.core.filters.ISystemFilterReference;
|
||||||
import org.eclipse.rse.core.filters.ISystemFilterString;
|
import org.eclipse.rse.core.filters.ISystemFilterString;
|
||||||
import org.eclipse.rse.core.model.IHost;
|
import org.eclipse.rse.core.model.IHost;
|
||||||
|
@ -271,6 +274,46 @@ public abstract class RemoteFileSubSystem extends SubSystem implements IRemoteFi
|
||||||
// -------------------------
|
// -------------------------
|
||||||
// Filter Testing Methods...
|
// Filter Testing Methods...
|
||||||
// -------------------------
|
// -------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see org.eclipse.rse.core.subsystems.SubSystem#doesFilterMatch(org.eclipse.rse.core.filters.ISystemFilter, java.lang.String)
|
||||||
|
*/
|
||||||
|
public boolean doesFilterMatch(ISystemFilter filter, String remoteObjectAbsoluteName) {
|
||||||
|
|
||||||
|
if (filter.isPromptable() || !doesFilterTypeMatch(filter, remoteObjectAbsoluteName)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean would = false;
|
||||||
|
|
||||||
|
String[] strings = filter.getFilterStrings();
|
||||||
|
|
||||||
|
if (strings != null) {
|
||||||
|
|
||||||
|
for (int idx = 0; !would && (idx < strings.length); idx++) {
|
||||||
|
|
||||||
|
// for "Drives" filter on Windows, only return match if the absolute path is a drive letter
|
||||||
|
if (strings[idx].equals("*")) {
|
||||||
|
IPath path = new Path(remoteObjectAbsoluteName);
|
||||||
|
|
||||||
|
if (path.segmentCount() == 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (strings[idx].equals("./*")) {
|
||||||
|
would = true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
would = doesFilterStringMatch(strings[idx], remoteObjectAbsoluteName, filter.areStringsCaseSensitive());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return would;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return true if the given remote object name will pass the filtering criteria for
|
* Return true if the given remote object name will pass the filtering criteria for
|
||||||
|
@ -340,6 +383,7 @@ public abstract class RemoteFileSubSystem extends SubSystem implements IRemoteFi
|
||||||
else
|
else
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return true if the given filter string lists the contents of the given remote object.
|
* Return true if the given filter string lists the contents of the given remote object.
|
||||||
* For example, if given a folder, return true if the given filter string
|
* For example, if given a folder, return true if the given filter string
|
||||||
|
|
Loading…
Add table
Reference in a new issue