mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-14 12:35:22 +02:00
[192884] Should not use filter to determine previous query results
This commit is contained in:
parent
90e3c722c5
commit
031f379d36
1 changed files with 161 additions and 175 deletions
|
@ -9,7 +9,7 @@
|
||||||
* component that contains this file: David McKnight.
|
* component that contains this file: David McKnight.
|
||||||
*
|
*
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* {Name} (company) - description of contribution.
|
* David McKnight (IBM) - [192884] Should not use filter to determine previous query results
|
||||||
********************************************************************************/
|
********************************************************************************/
|
||||||
package org.eclipse.rse.internal.dstore.universal.miners.filesystem;
|
package org.eclipse.rse.internal.dstore.universal.miners.filesystem;
|
||||||
|
|
||||||
|
@ -22,7 +22,6 @@ import java.util.List;
|
||||||
import org.eclipse.dstore.core.model.DE;
|
import org.eclipse.dstore.core.model.DE;
|
||||||
import org.eclipse.dstore.core.model.DataElement;
|
import org.eclipse.dstore.core.model.DataElement;
|
||||||
import org.eclipse.dstore.core.model.DataStore;
|
import org.eclipse.dstore.core.model.DataStore;
|
||||||
import org.eclipse.dstore.core.util.StringCompare;
|
|
||||||
import org.eclipse.rse.dstore.universal.miners.IUniversalDataStoreConstants;
|
import org.eclipse.rse.dstore.universal.miners.IUniversalDataStoreConstants;
|
||||||
import org.eclipse.rse.dstore.universal.miners.UniversalFileSystemMiner;
|
import org.eclipse.rse.dstore.universal.miners.UniversalFileSystemMiner;
|
||||||
import org.eclipse.rse.dstore.universal.miners.UniversalServerUtilities;
|
import org.eclipse.rse.dstore.universal.miners.UniversalServerUtilities;
|
||||||
|
@ -139,10 +138,10 @@ public class FileQueryThread extends QueryThread
|
||||||
{
|
{
|
||||||
createDataElement(ds, subject, list, queryType, filter, include, null);
|
createDataElement(ds, subject, list, queryType, filter, include, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Method to create the DataElement object in the datastore.
|
* Method to create the DataElement object in the datastore.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
protected void createDataElement(DataStore ds, DataElement subject,
|
protected void createDataElement(DataStore ds, DataElement subject,
|
||||||
File[] list, String queryType, String filter, int include, String types[])
|
File[] list, String queryType, String filter, int include, String types[])
|
||||||
{
|
{
|
||||||
|
@ -161,210 +160,197 @@ public class FileQueryThread extends QueryThread
|
||||||
DataElement child = (DataElement)children.get(f);
|
DataElement child = (DataElement)children.get(f);
|
||||||
if (!child.isDeleted())
|
if (!child.isDeleted())
|
||||||
{
|
{
|
||||||
String type = child.getType();
|
|
||||||
if (type.equals(IUniversalDataStoreConstants.UNIVERSAL_FILE_DESCRIPTOR) || type.equals(IUniversalDataStoreConstants.UNIVERSAL_ARCHIVE_FILE_DESCRIPTOR))
|
|
||||||
{
|
|
||||||
if (StringCompare.compare(filter, child.getName(), false))
|
|
||||||
{
|
|
||||||
//filteredChildren.add(child);
|
|
||||||
filteredChildren.put(child.getName(), child);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//filteredChildren.add(child);
|
|
||||||
filteredChildren.put(child.getName(), child);
|
filteredChildren.put(child.getName(), child);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
boolean found = false;
|
boolean found = false;
|
||||||
|
|
||||||
// Check if the current Objects in the DataStore are valid... exist
|
// Check if the current Objects in the DataStore are valid... exist
|
||||||
// on the remote host
|
// on the remote host
|
||||||
try {
|
try {
|
||||||
for (int j = 0; j < list.length; ++j)
|
for (int j = 0; j < list.length; ++j)
|
||||||
{
|
{
|
||||||
if (_isCancelled) {
|
if (_isCancelled) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
found = false;
|
found = false;
|
||||||
File file = list[j];
|
File file = list[j];
|
||||||
String fileName = file.getName();
|
String fileName = file.getName();
|
||||||
boolean isHidden = file.isHidden() || fileName.charAt(0) == '.';
|
boolean isHidden = file.isHidden() || fileName.charAt(0) == '.';
|
||||||
|
|
||||||
DataElement previousElement = (DataElement)filteredChildren.get(fileName);
|
DataElement previousElement = (DataElement)filteredChildren.get(fileName);
|
||||||
if (previousElement != null && !previousElement.isDeleted())
|
if (previousElement != null && !previousElement.isDeleted())
|
||||||
|
{
|
||||||
|
// Type have to be equal as well
|
||||||
|
//String type = ((DataElement) currentObjList[i]).getType();
|
||||||
|
String type = previousElement.getType();
|
||||||
|
boolean isfile = list[j].isFile();
|
||||||
|
if (((type.equals(IUniversalDataStoreConstants.UNIVERSAL_FILE_DESCRIPTOR) || type.equals(IUniversalDataStoreConstants.UNIVERSAL_ARCHIVE_FILE_DESCRIPTOR)) && isfile)
|
||||||
|
||
|
||||||
|
(type.equals(IUniversalDataStoreConstants.UNIVERSAL_FOLDER_DESCRIPTOR) && !isfile))
|
||||||
|
{
|
||||||
|
if (types !=null)
|
||||||
{
|
{
|
||||||
// Type have to be equal as well
|
String attributes = previousElement.getAttribute(DE.A_SOURCE);
|
||||||
//String type = ((DataElement) currentObjList[i]).getType();
|
String thisType = types[j];
|
||||||
String type = previousElement.getType();
|
if (attributes.indexOf(thisType) != -1)
|
||||||
boolean isfile = list[j].isFile();
|
|
||||||
if (((type.equals(IUniversalDataStoreConstants.UNIVERSAL_FILE_DESCRIPTOR) || type.equals(IUniversalDataStoreConstants.UNIVERSAL_ARCHIVE_FILE_DESCRIPTOR)) && isfile)
|
|
||||||
||
|
|
||||||
(type.equals(IUniversalDataStoreConstants.UNIVERSAL_FOLDER_DESCRIPTOR) && !isfile))
|
|
||||||
{
|
{
|
||||||
if (types !=null)
|
filteredChildren.remove(list[j].getName()); //remove it from the filterChildren list
|
||||||
{
|
found = true;
|
||||||
String attributes = previousElement.getAttribute(DE.A_SOURCE);
|
|
||||||
String thisType = types[j];
|
|
||||||
if (attributes.indexOf(thisType) != -1)
|
|
||||||
{
|
|
||||||
filteredChildren.remove(list[j].getName()); //remove it from the filterChildren list
|
|
||||||
found = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
filteredChildren.remove(list[j].getName());
|
|
||||||
found = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
DataElement deObj = null;
|
|
||||||
if (!isHidden || _showHidden)
|
|
||||||
{
|
{
|
||||||
if (found)
|
filteredChildren.remove(list[j].getName());
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DataElement deObj = null;
|
||||||
|
if (!isHidden || _showHidden)
|
||||||
|
{
|
||||||
|
if (found)
|
||||||
|
{
|
||||||
|
//this object already exists in the DStore
|
||||||
|
deObj = previousElement;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//We need to create a new data element for this object.
|
||||||
|
if (include == IClientServerConstants.INCLUDE_ALL)
|
||||||
|
{
|
||||||
|
if (file.isDirectory())
|
||||||
{
|
{
|
||||||
//this object already exists in the DStore
|
deObj = ds.createObject(subject,FileDescriptors._deUniversalFolderObject,fileName);
|
||||||
deObj = previousElement;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
// file
|
||||||
{
|
{
|
||||||
//We need to create a new data element for this object.
|
if (ArchiveHandlerManager.getInstance().isArchive(file))
|
||||||
if (include == IClientServerConstants.INCLUDE_ALL)
|
|
||||||
{
|
{
|
||||||
if (file.isDirectory())
|
deObj = ds
|
||||||
{
|
.createObject(
|
||||||
deObj = ds.createObject(subject,FileDescriptors._deUniversalFolderObject,fileName);
|
subject,
|
||||||
}
|
FileDescriptors._deUniversalArchiveFileObject,
|
||||||
else
|
|
||||||
// file
|
|
||||||
{
|
|
||||||
if (ArchiveHandlerManager.getInstance().isArchive(file))
|
|
||||||
{
|
|
||||||
deObj = ds
|
|
||||||
.createObject(
|
|
||||||
subject,
|
|
||||||
FileDescriptors._deUniversalArchiveFileObject,
|
|
||||||
fileName);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
deObj = ds.createObject(subject,
|
|
||||||
FileDescriptors._deUniversalFileObject,
|
|
||||||
fileName);
|
fileName);
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (include == IClientServerConstants.INCLUDE_FOLDERS_ONLY)
|
else
|
||||||
{
|
{
|
||||||
if (ArchiveHandlerManager.getInstance().isArchive(file))
|
deObj = ds.createObject(subject,
|
||||||
{
|
FileDescriptors._deUniversalFileObject,
|
||||||
deObj = ds.createObject(subject,
|
fileName);
|
||||||
FileDescriptors._deUniversalArchiveFileObject,
|
|
||||||
fileName);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
deObj = ds.createObject(subject,
|
|
||||||
FileDescriptors._deUniversalFolderObject,
|
|
||||||
fileName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (include == IClientServerConstants.INCLUDE_FILES_ONLY)
|
|
||||||
{
|
|
||||||
if (ArchiveHandlerManager.getInstance().isArchive(file))
|
|
||||||
{
|
|
||||||
deObj = ds.createObject(subject,
|
|
||||||
FileDescriptors._deUniversalArchiveFileObject,
|
|
||||||
fileName);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
deObj = ds
|
|
||||||
.createObject(subject,
|
|
||||||
FileDescriptors._deUniversalFileObject,
|
|
||||||
fileName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (deObj != null)
|
|
||||||
{
|
|
||||||
if (queryType.equals(IUniversalDataStoreConstants.UNIVERSAL_FILTER_DESCRIPTOR))
|
|
||||||
{
|
|
||||||
deObj.setAttribute(DE.A_VALUE, subject.getAttribute(DE.A_VALUE));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
|
|
||||||
if (subject.getName().length() > 0)
|
|
||||||
{
|
|
||||||
String valueStr = subject.getAttribute(DE.A_VALUE);
|
|
||||||
//String valueStr = list[i].getParentFile().getAbsolutePath();
|
|
||||||
StringBuffer valueBuffer = new StringBuffer(valueStr);
|
|
||||||
if ((_isWindows && valueStr.endsWith("\\"))|| valueStr.endsWith("/") || subject.getName().startsWith("/")) //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
|
||||||
{
|
|
||||||
valueBuffer.append(subject.getName());
|
|
||||||
deObj.setAttribute(DE.A_VALUE,valueBuffer.toString());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
valueBuffer.append(File.separatorChar);
|
|
||||||
valueBuffer.append(subject.getName());
|
|
||||||
deObj.setAttribute(DE.A_VALUE,valueBuffer.toString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
String valueStr = list[j].getParentFile().getAbsolutePath();
|
|
||||||
deObj.setAttribute(DE.A_VALUE, valueStr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
String properties = setProperties(file);
|
else if (include == IClientServerConstants.INCLUDE_FOLDERS_ONLY)
|
||||||
if (deObj != null)
|
{
|
||||||
|
if (ArchiveHandlerManager.getInstance().isArchive(file))
|
||||||
{
|
{
|
||||||
if (types != null)
|
deObj = ds.createObject(subject,
|
||||||
|
FileDescriptors._deUniversalArchiveFileObject,
|
||||||
|
fileName);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
deObj = ds.createObject(subject,
|
||||||
|
FileDescriptors._deUniversalFolderObject,
|
||||||
|
fileName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (include == IClientServerConstants.INCLUDE_FILES_ONLY)
|
||||||
|
{
|
||||||
|
if (ArchiveHandlerManager.getInstance().isArchive(file))
|
||||||
|
{
|
||||||
|
deObj = ds.createObject(subject,
|
||||||
|
FileDescriptors._deUniversalArchiveFileObject,
|
||||||
|
fileName);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
deObj = ds
|
||||||
|
.createObject(subject,
|
||||||
|
FileDescriptors._deUniversalFileObject,
|
||||||
|
fileName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (deObj != null)
|
||||||
|
{
|
||||||
|
if (queryType.equals(IUniversalDataStoreConstants.UNIVERSAL_FILTER_DESCRIPTOR))
|
||||||
|
{
|
||||||
|
deObj.setAttribute(DE.A_VALUE, subject.getAttribute(DE.A_VALUE));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
if (subject.getName().length() > 0)
|
||||||
{
|
{
|
||||||
String oldSource = deObj.getAttribute(DE.A_SOURCE);
|
String valueStr = subject.getAttribute(DE.A_VALUE);
|
||||||
String newSource = properties + "|" + types[j]; //$NON-NLS-1$
|
//String valueStr = list[i].getParentFile().getAbsolutePath();
|
||||||
if (!oldSource.startsWith(newSource))
|
StringBuffer valueBuffer = new StringBuffer(valueStr);
|
||||||
|
if ((_isWindows && valueStr.endsWith("\\"))|| valueStr.endsWith("/") || subject.getName().startsWith("/")) //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||||
{
|
{
|
||||||
deObj.setAttribute(DE.A_SOURCE, newSource);
|
valueBuffer.append(subject.getName());
|
||||||
}
|
deObj.setAttribute(DE.A_VALUE,valueBuffer.toString());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
valueBuffer.append(File.separatorChar);
|
||||||
|
valueBuffer.append(subject.getName());
|
||||||
|
deObj.setAttribute(DE.A_VALUE,valueBuffer.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
String oldSource = deObj.getAttribute(DE.A_SOURCE);
|
String valueStr = list[j].getParentFile().getAbsolutePath();
|
||||||
String newSource = properties;
|
deObj.setAttribute(DE.A_VALUE, valueStr);
|
||||||
if (!oldSource.startsWith(newSource))
|
|
||||||
deObj.setAttribute(DE.A_SOURCE, properties);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} // end for j
|
|
||||||
|
|
||||||
//Object left over in the filteredChildren is no longer in the system any more. Need to remove.
|
|
||||||
Iterator myIterator = filteredChildren.keySet().iterator();
|
|
||||||
while(myIterator.hasNext())
|
|
||||||
{
|
|
||||||
ds.deleteObject(subject, (DataElement)(filteredChildren.get(myIterator.next())));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (Exception e) {
|
String properties = setProperties(file);
|
||||||
e.printStackTrace();
|
if (deObj != null)
|
||||||
UniversalServerUtilities.logError(UniversalFileSystemMiner.CLASSNAME,
|
{
|
||||||
"createDataElement failed with exception - isFile ", e); //$NON-NLS-1$
|
if (types != null)
|
||||||
|
{
|
||||||
|
String oldSource = deObj.getAttribute(DE.A_SOURCE);
|
||||||
|
String newSource = properties + "|" + types[j]; //$NON-NLS-1$
|
||||||
|
if (!oldSource.startsWith(newSource))
|
||||||
|
|
||||||
|
{
|
||||||
|
deObj.setAttribute(DE.A_SOURCE, newSource);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
String oldSource = deObj.getAttribute(DE.A_SOURCE);
|
||||||
|
String newSource = properties;
|
||||||
|
if (!oldSource.startsWith(newSource))
|
||||||
|
deObj.setAttribute(DE.A_SOURCE, properties);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} // end for j
|
||||||
|
|
||||||
|
//Object left over in the filteredChildren is no longer in the system any more. Need to remove.
|
||||||
|
Iterator myIterator = filteredChildren.keySet().iterator();
|
||||||
|
while(myIterator.hasNext())
|
||||||
|
{
|
||||||
|
ds.deleteObject(subject, (DataElement)(filteredChildren.get(myIterator.next())));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
UniversalServerUtilities.logError(UniversalFileSystemMiner.CLASSNAME,
|
||||||
|
"createDataElement failed with exception - isFile ", e); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue