1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-28 03:15:33 +02:00

[210682] Copy collisions will use SystemCopyDialog now instead of renameDialog when there is a copy collision within the same connection

This commit is contained in:
David McKnight 2008-03-27 14:50:06 +00:00
parent 63f7168933
commit 900754f99d
10 changed files with 1183 additions and 490 deletions

View file

@ -34,14 +34,15 @@
* David McKnight (IBM) - [209375] new API copyRemoteResourcesToWorkspaceMultiple to optimize downloads
* Rupen Mardirossian (IBM) - [208435] added constructor to nested RenameRunnable class to take in names that are previously used as a parameter for multiple renaming instances, passed through check collision as well through overloading.
* Xuan Chen (IBM) - [160775] [api] [breaking] [nl] rename (at least within a zip) blocks UI thread
* David Mcknight (IBM) - [203114] don't treat XML files specially (no hidden prefs for bin vs text)
* David McKnight (IBM) - [203114] don't treat XML files specially (no hidden prefs for bin vs text)
* David McKnight (IBM) - [209552] get rid of copy APIs to be clearer with download and upload
* David McKnight (IBM) - [143503] encoding and isBinary needs to be stored in the IFile properties
* Xuan Chen (IBM) - [191370] [dstore] supertransfer zip not deleted when cancelling copy
* Xuan Chen (IBM) - [191370] [dstore] supertransfer zip not deleted when canceling copy
* Xuan Chen (IBM) - [210816] Archive testcases throw ResourceException if they are run in batch
* David McKnight (IBM) - [216252] [api][nls] Resource Strings specific to subsystems should be moved from rse.ui into files.ui / shells.ui / processes.ui where possible
* Martin Oberhuber (Wind River) - [220020][api][breaking] SystemFileTransferModeRegistry should be internal
* David McKnight (IBM) - [220547] [api][breaking] SimpleSystemMessage needs to specify a message id and some messages should be shared
* Rupen Mardirossian (IBM) - [210682] Collisions when doing a copy operation across systems will us the SystemCopyDialog
********************************************************************************/
package org.eclipse.rse.files.ui.resources;
@ -107,6 +108,7 @@ import org.eclipse.rse.subsystems.files.core.subsystems.RemoteFileSubSystem;
import org.eclipse.rse.subsystems.files.core.util.ValidatorFileUniqueName;
import org.eclipse.rse.ui.RSEUIPlugin;
import org.eclipse.rse.ui.SystemBasePlugin;
import org.eclipse.rse.internal.ui.dialogs.CopyRunnable;
import org.eclipse.rse.ui.dialogs.SystemRenameSingleDialog;
import org.eclipse.rse.ui.messages.SystemMessageDialog;
import org.eclipse.swt.widgets.Display;
@ -116,6 +118,9 @@ import org.eclipse.ui.PlatformUI;
* Utility class for doing file transfers on universal systems.
*
* Clients may use this class, but not instantiate or subclass it.
*
* @noextend
* @noinstantiate
*/
public class UniversalFileTransferUtility
{
@ -1316,8 +1321,10 @@ public class UniversalFileTransferUtility
// clear the list so that next time we use renamed names
newFilePathList.clear();
List toCopyNames = new ArrayList();
//List toCopyNames = new ArrayList(); //was used for rename operation (no longer needed)
List copyFilesOrFolders = new ArrayList();
List existingFilesOrFolders = new ArrayList();
for (int i = 0; i < resources.size() && !resultSet.hasMessage(); i++)
{
if (monitor != null && monitor.isCanceled())
@ -1347,8 +1354,15 @@ public class UniversalFileTransferUtility
String oldPath = newPathBuf.toString() + name;
if (checkForCollisions)
{
RenameStatus status = checkForCollision(existingFiles, targetFolder, name, oldPath, toCopyNames);
int severity = status.getSeverity();
if(existingFiles!=null)
{
if(checkForCollision(existingFiles, targetFolder, oldPath))
{
existingFilesOrFolders.add(existingFiles.get(oldPath));
}
}
//below code is used for renaming operation, which is no longer needed
/*int severity = status.getSeverity();
if (severity == IStatus.OK) {
name = status.getMessage();
@ -1364,56 +1378,9 @@ public class UniversalFileTransferUtility
else if (code == RenameStatus.CANCEL_ALL) {
break;
}
}
}
String newPath = newPathBuf.toString() + name;
try
{
String srcCharSet = null;
try
{
srcCharSet = ((IFile)srcFileOrFolder).getCharset(false);
if (srcCharSet == null || srcCharSet.length() == 0)
{
srcCharSet = SystemEncodingUtil.ENCODING_UTF_8;
}
}
catch (CoreException e)
{
srcCharSet = SystemEncodingUtil.ENCODING_UTF_8;
}
String srcFileLocation = srcFileOrFolder.getLocation().toOSString();
targetFS.upload(srcFileLocation, srcCharSet, newPath, targetFS.getRemoteEncoding(),monitor);
newFilePathList.add(newPath);
// should check preference first
if (RSEUIPlugin.getDefault().getPreferenceStore().getBoolean(ISystemFilePreferencesConstants.PRESERVETIMESTAMPS))
{
SystemIFileProperties properties = new SystemIFileProperties(srcFileOrFolder);
((FileServiceSubSystem)targetFS).getFileService().setLastModified(newPathBuf.toString(), name, properties.getRemoteFileTimeStamp(), monitor);
}
}
catch (RemoteFileIOException e)
{
resultSet.setMessage(e.getSystemMessage());
}
catch (SystemMessageException e)
{
resultSet.setMessage(e.getSystemMessage());
}
if (resultSet.hasMessage())
{
return resultSet;
}*/
}
copyFilesOrFolders.add(srcFileOrFolder);
}
else if (srcFileOrFolder instanceof IContainer)
@ -1421,6 +1388,15 @@ public class UniversalFileTransferUtility
String oldPath = newPathBuf.toString() + name;
if (checkForCollisions)
{
if(existingFiles!=null)
{
if(checkForCollision(existingFiles, targetFolder, oldPath))
{
existingFilesOrFolders.add(existingFiles.get(oldPath));
}
}
//below code is used for renaming operation, which is no longer needed
/*
RenameStatus status = checkForCollision(existingFiles, targetFolder, name, oldPath, toCopyNames);
int severity = status.getSeverity();
@ -1439,83 +1415,146 @@ public class UniversalFileTransferUtility
break;
}
}
}
*/
IContainer directory = (IContainer) srcFileOrFolder;
if (!directory.exists())
}
copyFilesOrFolders.add(srcFileOrFolder);
}
}
boolean overwrite=false;
if(existingFilesOrFolders.size()>0)
{
CopyRunnable cr = new CopyRunnable(existingFilesOrFolders);
Display.getDefault().syncExec(cr);
overwrite = cr.getOk();
}
if(existingFilesOrFolders.size()==0 || overwrite)
{
for (int i = 0; i < copyFilesOrFolders.size() && !resultSet.hasMessage(); i++)
{
IResource srcFileOrFolder = (IResource)copyFilesOrFolders.get(i);
String name = srcFileOrFolder.getName();
String newPath = newPathBuf.toString() + name;
if (srcFileOrFolder instanceof IFile)
{
try
{
directory.refreshLocal(IResource.DEPTH_ONE, monitor);
String srcCharSet = null;
try
{
srcCharSet = ((IFile)srcFileOrFolder).getCharset(false);
if (srcCharSet == null || srcCharSet.length() == 0)
{
srcCharSet = SystemEncodingUtil.ENCODING_UTF_8;
}
}
catch (CoreException e)
{
srcCharSet = SystemEncodingUtil.ENCODING_UTF_8;
}
String srcFileLocation = srcFileOrFolder.getLocation().toOSString();
targetFS.upload(srcFileLocation, srcCharSet, newPath, targetFS.getRemoteEncoding(),monitor);
newFilePathList.add(newPath);
// should check preference first
if (RSEUIPlugin.getDefault().getPreferenceStore().getBoolean(ISystemFilePreferencesConstants.PRESERVETIMESTAMPS))
{
SystemIFileProperties properties = new SystemIFileProperties(srcFileOrFolder);
((FileServiceSubSystem)targetFS).getFileService().setLastModified(newPathBuf.toString(), name, properties.getRemoteFileTimeStamp(), monitor);
}
}
catch (RemoteFileIOException e)
{
resultSet.setMessage(e.getSystemMessage());
}
catch (SystemMessageException e)
{
resultSet.setMessage(e.getSystemMessage());
}
if (resultSet.hasMessage())
{
return resultSet;
}
}
if(srcFileOrFolder instanceof IContainer)
{
IContainer directory = (IContainer) srcFileOrFolder;
if (!directory.exists())
{
try
{
directory.refreshLocal(IResource.DEPTH_ONE, monitor);
}
catch (Exception e)
{
}
}
try
{
if (existingFiles != null)
{
IRemoteFile newTargetFolder = (IRemoteFile)existingFiles.get(newPath);
// newTargetFolder will be null if user chose to do a rename
if (newTargetFolder == null) {
newTargetFolder = targetFS.getRemoteFileObject(newPath, monitor);
}
if (newTargetFolder != null && !newTargetFolder.exists())
{
newTargetFolder = targetFS.createFolder(newTargetFolder, monitor);
}
boolean isTargetLocal = newTargetFolder.getParentRemoteFileSubSystem().getHost().getSystemType().isLocal();
boolean destInArchive = (newTargetFolder instanceof IVirtualRemoteFile) || newTargetFolder.isArchive();
if (doCompressedTransfer && doSuperTransferPreference && !destInArchive && !isTargetLocal)
{
compressedUploadFromWorkspace(directory, newTargetFolder, monitor);
}
else
{
//sometimes, IContainer#members does not return the right members under
//this folder. We need to call refreshLocal() first to overcome this problem
directory.refreshLocal(IResource.DEPTH_ONE, monitor);
IResource[] children = directory.members();
SystemWorkspaceResourceSet childSet = new SystemWorkspaceResourceSet(children);
SystemRemoteResourceSet childResults = uploadResourcesFromWorkspace(childSet, newTargetFolder, monitor, false);
if (childResults == null)
{
return null;
}
if (childResults.hasMessage())
{
resultSet.setMessage(childResults.getMessage());
}
}
newFilePathList.add(newPath);
}
}
catch (SystemMessageException e)
{
workspaceSet.setMessage(e.getSystemMessage());
}
catch (CoreException e)
{
e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
}
String newPath = newPathBuf.toString() + name;
// this is a directory
// recursively copy
try
{
if (existingFiles != null)
{
IRemoteFile newTargetFolder = (IRemoteFile)existingFiles.get(newPath);
// newTargetFolder will be null if user chose to do a rename
if (newTargetFolder == null) {
newTargetFolder = targetFS.getRemoteFileObject(newPath, monitor);
}
if (newTargetFolder != null && !newTargetFolder.exists())
{
newTargetFolder = targetFS.createFolder(newTargetFolder, monitor);
}
boolean isTargetLocal = newTargetFolder.getParentRemoteFileSubSystem().getHost().getSystemType().isLocal();
boolean destInArchive = (newTargetFolder instanceof IVirtualRemoteFile) || newTargetFolder.isArchive();
if (doCompressedTransfer && doSuperTransferPreference && !destInArchive && !isTargetLocal)
{
compressedUploadFromWorkspace(directory, newTargetFolder, monitor);
}
else
{
//sometimes, IContainer#members does not return the right members under
//this folder. We need to call refreshLocal() first to overcome this problem
directory.refreshLocal(IResource.DEPTH_ONE, monitor);
IResource[] children = directory.members();
SystemWorkspaceResourceSet childSet = new SystemWorkspaceResourceSet(children);
SystemRemoteResourceSet childResults = uploadResourcesFromWorkspace(childSet, newTargetFolder, monitor, false);
if (childResults == null)
{
return null;
}
if (childResults.hasMessage())
{
resultSet.setMessage(childResults.getMessage());
}
}
newFilePathList.add(newPath);
}
}
catch (SystemMessageException e)
{
workspaceSet.setMessage(e.getSystemMessage());
}
catch (CoreException e)
{
e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
try
{
IRemoteFile[] results = targetFS.getRemoteFileObjects((String[])newFilePathList.toArray(new String[newFilePathList.size()]), monitor);
@ -2468,7 +2507,19 @@ public class UniversalFileTransferUtility
return status;
}
protected static boolean checkForCollision(SystemRemoteResourceSet existingFiles, IRemoteFile targetFolder, String oldPath)
{
IRemoteFile targetFileOrFolder = (IRemoteFile) existingFiles.get(oldPath);
if (targetFileOrFolder != null && targetFileOrFolder.exists())
return true;
else
return false;
}
public static class RenameRunnable implements Runnable
{
private IRemoteFile _targetFileOrFolder;

View file

@ -1,25 +1,26 @@
/********************************************************************************
* Copyright (c) 2002, 2007 IBM Corporation and others. All rights reserved.
* Copyright (c) 2002, 2008 IBM Corporation and others. 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
* of the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
*
* Initial Contributors:
* The following IBM employees contributed to the Remote System Explorer
* component that contains this file: David McKnight, Kushal Munir,
* Michael Berger, David Dykstal, Phil Coulthard, Don Yantzi, Eric Simpson,
* component that contains this file: David McKnight, Kushal Munir,
* Michael Berger, David Dykstal, Phil Coulthard, Don Yantzi, Eric Simpson,
* Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
*
* Contributors:
* Martin Oberhuber (Wind River) - [168975] Move RSE Events API to Core
* Martin Oberhuber (Wind River) - [177523] Unify singleton getter methods
* Martin Oberhuber (Wind River) - [186128][refactoring] Move IProgressMonitor last in public base classes
* Martin Oberhuber (Wind River) - [186128][refactoring] Move IProgressMonitor last in public base classes
* Martin Oberhuber (Wind River) - [186773] split ISystemRegistryUI from ISystemRegistry
* Kevin Doyle (IBM) - [196588] Move Dialog doesn't show Archives
* David McKnight (IBM) - [207178] changing list APIs for file service and subsystems
* Xuan Chen (IBM) - [160775] [api] rename (at least within a zip) blocks UI thread
* David McKnight (IBM) - [216252] [api][nls] Resource Strings specific to subsystems should be moved from rse.ui into files.ui / shells.ui / processes.ui where possible
* David McKnight (IBM) - [220547] [api][breaking] SimpleSystemMessage needs to specify a message id and some messages should be shared
* Rupen Mardirossian (IBM) - [210682] created checkForCollision method that returns a boolean for SystemCopyDialog enhancement
********************************************************************************/
package org.eclipse.rse.internal.files.ui.actions;
@ -73,33 +74,33 @@ import org.eclipse.swt.widgets.Shell;
* Copy selected files and folders action.
*/
public class SystemCopyRemoteFileAction extends SystemBaseCopyAction
implements IValidatorRemoteSelection
implements IValidatorRemoteSelection
{
protected IRemoteFile targetFolder, targetFileOrFolder = null;
protected IRemoteFile firstSelection = null;
protected IRemoteFile firstSelectionParent = null;
protected IRemoteFile[] files;
protected Vector copiedFiles = new Vector();
protected IHost sourceConnection;
protected IRemoteFileSubSystem ss;
protected IRemoteFile targetFolder, targetFileOrFolder = null;
protected IRemoteFile firstSelection = null;
protected IRemoteFile firstSelectionParent = null;
protected IRemoteFile[] files;
protected Vector copiedFiles = new Vector();
protected IHost sourceConnection;
protected IRemoteFileSubSystem ss;
/**
* Constructor
*/
public SystemCopyRemoteFileAction(Shell shell)
public SystemCopyRemoteFileAction(Shell shell)
{
this(shell, MODE_COPY);
}
/**
* Constructor for subclass
*/
SystemCopyRemoteFileAction(Shell shell, int mode)
SystemCopyRemoteFileAction(Shell shell, int mode)
{
super(shell, mode);
setHelp(RSEUIPlugin.HELPPREFIX+"actn0110"); //$NON-NLS-1$
setDialogHelp(RSEUIPlugin.HELPPREFIX+"dcrf0000"); //$NON-NLS-1$
setHelp(RSEUIPlugin.HELPPREFIX+"actn0110"); //$NON-NLS-1$
setDialogHelp(RSEUIPlugin.HELPPREFIX+"dcrf0000"); //$NON-NLS-1$
}
/**
* Reset. This is a re-run of this action
*/
@ -116,7 +117,7 @@ public class SystemCopyRemoteFileAction extends SystemBaseCopyAction
sourceConnection = null;
ss = null;
}
/**
* We override from parent to do unique checking...
* <p>
@ -127,19 +128,19 @@ public class SystemCopyRemoteFileAction extends SystemBaseCopyAction
public boolean updateSelection(IStructuredSelection selection)
{
boolean enable = true;
Iterator e = selection.iterator();
Iterator e = selection.iterator();
while (enable && e.hasNext())
{
Object selectedObject = e.next();
if (!(selectedObject instanceof IRemoteFile))
enable = false;
enable = false;
}
return enable;
}
// --------------------------
// PARENT METHOD OVERRIDES...
// --------------------------
// --------------------------
// PARENT METHOD OVERRIDES...
// --------------------------
public static class RenameRunnable implements Runnable
{
private IRemoteFile _targetFileOrFolder;
@ -148,24 +149,25 @@ public class SystemCopyRemoteFileAction extends SystemBaseCopyAction
{
_targetFileOrFolder = targetFileOrFolder;
}
public void run() {
ValidatorFileUniqueName validator = null;
ValidatorFileUniqueName validator = null;
SystemRenameSingleDialog dlg = new SystemRenameSingleDialog(null, true, _targetFileOrFolder, validator); // true => copy-collision-mode
dlg.open();
if (!dlg.wasCancelled())
_newName = dlg.getNewName();
else
_newName = null;
}
public String getNewName()
{
return _newName;
}
}
/**
* @see SystemBaseCopyAction#checkForCollision(Shell, IProgressMonitor, Object, Object, String)
* @param shell Window to host dialog
@ -175,42 +177,72 @@ public class SystemCopyRemoteFileAction extends SystemBaseCopyAction
* @param oldName will be the name of the IRemoteFile object currently being copied
*/
protected String checkForCollision(Shell shell, IProgressMonitor monitor,
Object targetContainer, Object oldObject, String oldName)
Object targetContainer, Object oldObject, String oldName)
{
String newName = oldName;
try {
targetFolder = (IRemoteFile)targetContainer;
ss = targetFolder.getParentRemoteFileSubSystem();
targetFileOrFolder = ss.getRemoteFileObject(targetFolder, oldName, monitor);
//RSEUIPlugin.logInfo("CHECKING FOR COLLISION ON '"+srcFileOrFolder.getAbsolutePath() + "' IN '" +targetFolder.getAbsolutePath()+"'");
//RSEUIPlugin.logInfo("...TARGET FILE: '"+tgtFileOrFolder.getAbsolutePath()+"'");
//RSEUIPlugin.logInfo("...TARGET FILE: '"+tgtFileOrFolder.getAbsolutePath()+"'");
//RSEUIPlugin.logInfo("...target.exists()? "+tgtFileOrFolder.exists());
if (targetFileOrFolder.exists())
{
//monitor.setVisible(false); wish we could!
// we no longer have to set the validator here... the common rename dialog we all now use queries the input
// object's system view adaptor for its name validator. See getNameValidator in SystemViewRemoteFileAdapter. phil
ValidatorFileUniqueName validator = null; // new ValidatorFileUniqueName(shell, targetFolder, srcFileOrFolder.isDirectory());
//SystemCollisionRenameDialog dlg = new SystemCollisionRenameDialog(shell, validator, oldName);
RenameRunnable rr = new RenameRunnable(targetFileOrFolder);
//monitor.setVisible(false); wish we could!
// we no longer have to set the validator here... the common rename dialog we all now use queries the input
// object's system view adaptor for its name validator. See getNameValidator in SystemViewRemoteFileAdapter. phil
// ValidatorFileUniqueName validator = null; // new
// ValidatorFileUniqueName(shell, targetFolder,
// srcFileOrFolder.isDirectory());
//SystemCollisionRenameDialog dlg = new SystemCollisionRenameDialog(shell, validator, oldName);
RenameRunnable rr = new RenameRunnable(targetFileOrFolder);
Display.getDefault().syncExec(rr);
newName = rr.getNewName();
}
} catch (SystemMessageException e) {
SystemBasePlugin.logError("SystemCopyRemoteFileAction.checkForCollision()", e); //$NON-NLS-1$
}
return newName;
}
/**
* @see SystemBaseCopyAction#checkForCollision(Shell, IProgressMonitor, Object, Object, String)
* @param shell Window to host dialog
* @param monitor Usually not needed
* @param targetContainer will be the IRemoteFile folder selected to copy into
* @param oldName will be the name of the IRemoteFile object currently being copied
*/
protected boolean checkForCollision(Shell shell, IProgressMonitor monitor,
Object targetContainer, String oldName)
{
try
{
targetFolder = (IRemoteFile)targetContainer;
ss = targetFolder.getParentRemoteFileSubSystem();
targetFileOrFolder = ss.getRemoteFileObject(targetFolder, oldName, monitor);
if (targetFileOrFolder.exists())
{
return true;
}
}
catch (SystemMessageException e)
{
SystemBasePlugin.logError("SystemCopyRemoteFileAction.checkForCollision()", e); //$NON-NLS-1$
}
return false;
}
/**
* @param targetContainer will be the IRemoteFile folder selected to copy into
* @param oldObject will be the IRemoteFile object currently being copied
@ -219,102 +251,102 @@ public class SystemCopyRemoteFileAction extends SystemBaseCopyAction
* @see SystemBaseCopyAction#doCopy(Object, Object, String, IProgressMonitor)
*/
protected boolean doCopy(Object targetContainer, Object oldObject, String newName, IProgressMonitor monitor)
throws Exception
{
targetFolder = (IRemoteFile)targetContainer;
throws Exception
{
targetFolder = (IRemoteFile)targetContainer;
IRemoteFile srcFileOrFolder = (IRemoteFile)oldObject;
IHost targetConnection = targetFolder.getSystemConnection();
IHost srcConnection = srcFileOrFolder.getSystemConnection();
boolean ok = false;
if (targetConnection == srcConnection)
{
if (targetConnection == srcConnection)
{
ss = targetFolder.getParentRemoteFileSubSystem();
ok = ss.copy(srcFileOrFolder, targetFolder, newName, null);
if (!ok)
{
String msgTxt = NLS.bind(FileResources.FILEMSG_COPY_FILE_FAILED, srcFileOrFolder.getName());
String msgDetails = FileResources.FILEMSG_COPY_FILE_FAILED_DETAILS;
SystemMessage msg = new SimpleSystemMessage(Activator.PLUGIN_ID,
ISystemFileConstants.FILEMSG_COPY_FILE_FAILED,
IStatus.ERROR, msgTxt, msgDetails);
throw new SystemMessageException(msg);
SystemMessage msg = new SimpleSystemMessage(Activator.PLUGIN_ID,
ISystemFileConstants.FILEMSG_COPY_FILE_FAILED,
IStatus.ERROR, msgTxt, msgDetails);
throw new SystemMessageException(msg);
}
else
{
String sep = targetFolder.getSeparator();
String targetFolderName = targetFolder.getAbsolutePath();
if (!targetFolderName.endsWith(sep))
copiedFiles.addElement(targetFolderName+sep+newName);
else
copiedFiles.addElement(targetFolderName+newName);
String sep = targetFolder.getSeparator();
String targetFolderName = targetFolder.getAbsolutePath();
if (!targetFolderName.endsWith(sep))
copiedFiles.addElement(targetFolderName+sep+newName);
else
copiedFiles.addElement(targetFolderName+newName);
}
}
// DKM - for cross system copy
else
{
IRemoteFileSubSystem targetFS = targetFolder.getParentRemoteFileSubSystem();
IRemoteFileSubSystem srcFS = srcFileOrFolder.getParentRemoteFileSubSystem();
String newPath = targetFolder.getAbsolutePath() + "/" + newName; //$NON-NLS-1$
if (srcFileOrFolder.isFile())
{
SystemRemoteEditManager mgr = SystemRemoteEditManager.getInstance();
// if remote edit project doesn't exist, create it
if (!mgr.doesRemoteEditProjectExist())
mgr.getRemoteEditProject();
StringBuffer path = new StringBuffer(mgr.getRemoteEditProjectLocation().makeAbsolute().toOSString());
}
// DKM - for cross system copy
else
{
IRemoteFileSubSystem targetFS = targetFolder.getParentRemoteFileSubSystem();
IRemoteFileSubSystem srcFS = srcFileOrFolder.getParentRemoteFileSubSystem();
String newPath = targetFolder.getAbsolutePath() + "/" + newName; //$NON-NLS-1$
if (srcFileOrFolder.isFile())
{
SystemRemoteEditManager mgr = SystemRemoteEditManager.getInstance();
// if remote edit project doesn't exist, create it
if (!mgr.doesRemoteEditProjectExist())
mgr.getRemoteEditProject();
StringBuffer path = new StringBuffer(mgr.getRemoteEditProjectLocation().makeAbsolute().toOSString());
path = path.append("/" + srcFS.getSystemProfileName() + "/" + srcFS.getHostAliasName() + "/"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
String absolutePath = srcFileOrFolder.getAbsolutePath();
int colonIndex = absolutePath.indexOf(IPath.DEVICE_SEPARATOR);
if (colonIndex != -1)
{
if (colonIndex == 0)
if (colonIndex != -1)
{
if (colonIndex == 0)
{
absolutePath = absolutePath.substring(1);
}
else if (colonIndex == (absolutePath.length() - 1))
else if (colonIndex == (absolutePath.length() - 1))
{
absolutePath = absolutePath.substring(0, colonIndex);
}
else
else
{
absolutePath = absolutePath.substring(0, colonIndex) + absolutePath.substring(colonIndex + 1);
}
}
path = path.append(absolutePath);
String tempFile = path.toString();
srcFS.download(srcFileOrFolder, tempFile, SystemEncodingUtil.ENCODING_UTF_8, null);
targetFS.upload(tempFile, SystemEncodingUtil.ENCODING_UTF_8, newPath, System.getProperty("file.encoding"), null); //$NON-NLS-1$
}
else
{
IRemoteFile newTargetFolder = targetFS.getRemoteFileObject(newPath, monitor);
targetFS.createFolder(newTargetFolder, monitor);
IRemoteFile[] children = srcFS.list(srcFileOrFolder, monitor);
if (children != null)
{
for (int i = 0; i < children.length; i++)
{
IRemoteFile child = children[i];
monitor.subTask("copying " + child.getName()); //$NON-NLS-1$
doCopy(newTargetFolder, child, child.getName(), monitor);
monitor.worked(1);
}
}
}
}
srcFS.download(srcFileOrFolder, tempFile, SystemEncodingUtil.ENCODING_UTF_8, null);
targetFS.upload(tempFile, SystemEncodingUtil.ENCODING_UTF_8, newPath, System.getProperty("file.encoding"), null); //$NON-NLS-1$
}
else
{
IRemoteFile newTargetFolder = targetFS.getRemoteFileObject(newPath, monitor);
targetFS.createFolder(newTargetFolder, monitor);
IRemoteFile[] children = srcFS.list(srcFileOrFolder, monitor);
if (children != null)
{
for (int i = 0; i < children.length; i++)
{
IRemoteFile child = children[i];
monitor.subTask("copying " + child.getName()); //$NON-NLS-1$
doCopy(newTargetFolder, child, child.getName(), monitor);
monitor.worked(1);
}
}
}
}
return ok;
}
@ -324,7 +356,7 @@ public class SystemCopyRemoteFileAction extends SystemBaseCopyAction
* Required parent class abstract method.
* Does not apply to us as we supply our own dialog for the copy-target
*/
protected SystemSimpleContentElement getTreeModel()
protected SystemSimpleContentElement getTreeModel()
{
return null;
}
@ -341,7 +373,7 @@ public class SystemCopyRemoteFileAction extends SystemBaseCopyAction
* @see SystemBaseCopyAction#getOldObjects()
* Returns an array of IRemoteFile objects
*/
protected Object[] getOldObjects()
protected Object[] getOldObjects()
{
return getSelectedFiles();
}
@ -349,16 +381,16 @@ public class SystemCopyRemoteFileAction extends SystemBaseCopyAction
/**
* @see SystemBaseCopyAction#getOldNames()
*/
protected String[] getOldNames()
protected String[] getOldNames()
{
IRemoteFile[] files = getSelectedFiles();
String[] names = new String[files.length];
for (int idx=0; idx<files.length; idx++)
names[idx] = files[idx].getName();
names[idx] = files[idx].getName();
return names;
}
/**
* Override of parent.
* Return the dialog that will be used to prompt for the copy/move target location.
@ -366,11 +398,11 @@ public class SystemCopyRemoteFileAction extends SystemBaseCopyAction
protected Dialog createDialog(Shell shell)
{
++runCount;
if (runCount > 1)
reset();
//return new SystemSimpleCopyDialog(parent, getPromptString(), mode, this, getTreeModel(), getTreeInitialSelection());
String dlgTitle = (mode==MODE_COPY ? SystemResources.RESID_COPY_TITLE : SystemResources.RESID_MOVE_TITLE);
if (runCount > 1)
reset();
//return new SystemSimpleCopyDialog(parent, getPromptString(), mode, this, getTreeModel(), getTreeInitialSelection());
String dlgTitle = (mode==MODE_COPY ? SystemResources.RESID_COPY_TITLE : SystemResources.RESID_MOVE_TITLE);
firstSelection = getFirstSelectedFile();
sourceConnection = firstSelection.getSystemConnection();
SystemRemoteFolderDialog dlg = new SystemRemoteFolderDialog(shell, dlgTitle, sourceConnection);
@ -378,10 +410,10 @@ public class SystemCopyRemoteFileAction extends SystemBaseCopyAction
dlg.setMessage(getPromptString());
dlg.setShowPropertySheet(true, false);
dlg.setDefaultSystemConnection(sourceConnection, true);
//dlg.setSystemConnection(sourceConnection);
if (mode==MODE_MOVE)
dlg.setSelectionValidator(this);
dlg.setSelectionValidator(this);
//RSEUIPlugin.logInfo("Calling getParentRemoteFile for '"+firstSelection.getAbsolutePath()+"'");
firstSelectionParent = firstSelection.getParentRemoteFile();
boolean supportsArchiveManagement = firstSelectionParent.getParentRemoteFileSubSystem().getParentRemoteFileSubSystemConfiguration().supportsArchiveManagement();
@ -399,14 +431,14 @@ public class SystemCopyRemoteFileAction extends SystemBaseCopyAction
RSEUIPlugin.logInfo("Result of getParentRemoteFile: '"+firstSelectionParent.getAbsolutePath()+"'");
else
RSEUIPlugin.logInfo("Result of getParentRemoteFile: null");
*/
*/
dlg.setPreSelection(firstSelectionParent);
// our title now reflects multiple selection. If single change it.
IStructuredSelection sel = getSelection();
//System.out.println("size = "+sel.size());
if (sel.size() == 1)
{
{
String singleTitle = null;
if (mode == MODE_COPY)
singleTitle = SystemResources.RESID_COPY_SINGLE_TITLE;
@ -415,36 +447,36 @@ public class SystemCopyRemoteFileAction extends SystemBaseCopyAction
//System.out.println("..."+singleTitle);
if (!singleTitle.startsWith("Missing")) // TODO: remove test after next mri rev //$NON-NLS-1$
dlg.setTitle(singleTitle);
}
}
return dlg;
}
/**
* Override this method if you supply your own copy/move target dialog.
* Override this method if you supply your own copy/move target dialog.
* Return the user-selected target or null if cancelled
*/
protected Object getTargetContainer(Dialog dlg)
{
SystemRemoteFolderDialog cpyDlg = (SystemRemoteFolderDialog)dlg;
SystemRemoteFolderDialog cpyDlg = (SystemRemoteFolderDialog)dlg;
Object targetContainer = null;
if (!cpyDlg.wasCancelled())
{
targetContainer = cpyDlg.getSelectedObject();
if (targetContainer instanceof ISystemFilterReference)
{
ISubSystem targetSubSystem = ((ISystemFilterReference)targetContainer).getSubSystem();
ISubSystemConfiguration factory = targetSubSystem.getSubSystemConfiguration();
if (factory.supportsDropInFilters())
{
targetContainer = targetSubSystem.getTargetForFilter((ISystemFilterReference)targetContainer);
}
}
targetContainer = cpyDlg.getSelectedObject();
if (targetContainer instanceof ISystemFilterReference)
{
ISubSystem targetSubSystem = ((ISystemFilterReference)targetContainer).getSubSystem();
ISubSystemConfiguration factory = targetSubSystem.getSubSystemConfiguration();
if (factory.supportsDropInFilters())
{
targetContainer = targetSubSystem.getTargetForFilter((ISystemFilterReference)targetContainer);
}
}
}
return targetContainer;
return targetContainer;
}
private void invalidateFilterReferences(IRemoteFile targetFolder)
{
{
String path = targetFolder.getAbsolutePath();
IRemoteFileSubSystem fileSS = targetFolder.getParentRemoteFileSubSystem();
ISystemFilterPoolReferenceManager mgr = fileSS.getSystemFilterPoolReferenceManager();
@ -471,20 +503,20 @@ public class SystemCopyRemoteFileAction extends SystemBaseCopyAction
par = fileSS.getRemoteFileObject(str, monitor);
}
catch (Exception e)
{
{
}
if (par != null)
str = par.getAbsolutePath();
//if (StringCompare.compare(str, path, true))
if (str.equals(path))
if (str.equals(path))
{
ISystemFilterReference ref = mgr.getSystemFilterReference(fileSS, filters[f]);
ref.markStale(true);
}
}
}
}
}
}
@ -492,40 +524,40 @@ public class SystemCopyRemoteFileAction extends SystemBaseCopyAction
* Called after all the copy/move operations end, be it successfully or not.
* Your opportunity to display completion or do post-copy selections/refreshes
*/
public void copyComplete()
public void copyComplete()
{
if (copiedFiles.size() == 0)
return;
return;
// refresh all instances of this parent, and all affected filters...
ISubSystem fileSS = targetFolder.getParentRemoteFileSubSystem();
Viewer originatingViewer = getViewer();
if (originatingViewer != null)
{
if (!targetFolder.getAbsolutePath().equals(firstSelectionParent.getAbsolutePath()))
{
// we select the first instance of the target folder now so that the copied members will be selected in it
// after it is refreshed via the remote_resource_created event.
if (originatingViewer instanceof SystemView)
{
// boolean selectedOk = ((SystemView)originatingViewer).selectRemoteObjects(targetFolder.getAbsolutePath(), fileSS, null);
//System.out.println(targetFolder.getAbsolutePath()+" selectedOK? " + selectedOk);
//if (selectedOk)
// return;
}
}
{
if (!targetFolder.getAbsolutePath().equals(firstSelectionParent.getAbsolutePath()))
{
// we select the first instance of the target folder now so that the copied members will be selected in it
// after it is refreshed via the remote_resource_created event.
if (originatingViewer instanceof SystemView)
{
// boolean selectedOk = ((SystemView)originatingViewer).selectRemoteObjects(targetFolder.getAbsolutePath(), fileSS, null);
//System.out.println(targetFolder.getAbsolutePath()+" selectedOK? " + selectedOk);
//if (selectedOk)
// return;
}
}
}
targetFolder.markStale(true);
targetFolder.markStale(true);
// invalidate filters
invalidateFilterReferences(targetFolder);
RSECorePlugin.getTheSystemRegistry().fireRemoteResourceChangeEvent(
ISystemRemoteChangeEvents.SYSTEM_REMOTE_RESOURCE_CREATED, copiedFiles, targetFolder.getAbsolutePath(), fileSS, null, originatingViewer);
ISystemRemoteChangeEvents.SYSTEM_REMOTE_RESOURCE_CREATED, copiedFiles, targetFolder.getAbsolutePath(), fileSS, null, originatingViewer);
/* Old release 1.0 way...
// did they copy to the same parent? Just refresh that parent, whatever it is...
if (targetFolder.getAbsolutePath().equals(firstSelectionParent.getAbsolutePath()))
@ -561,49 +593,49 @@ public class SystemCopyRemoteFileAction extends SystemBaseCopyAction
else
{
// refresh target folder in all views, but only select new files in this view...
org.eclipse.rse.ui.model.SystemResourceChangeEvent event =
org.eclipse.rse.ui.model.SystemResourceChangeEvent event =
new org.eclipse.rse.ui.model.SystemResourceChangeEvent(
targetFolder,ISystemResourceChangeEvent.EVENT_REFRESH_REMOTE, copiedFiles);
event.setOriginatingViewer(getViewer());
sr.fireEvent(event);
}
*/
*/
}
// ------------------
// PRIVATE METHODS...
// ------------------
/**
* Get the currently selected IRemoteFile objects
*/
protected IRemoteFile[] getSelectedFiles()
{
if (files == null)
{
IStructuredSelection selection = getSelection();
files = new IRemoteFile[selection.size()];
Iterator i = selection.iterator();
int idx=0;
while (i.hasNext())
{
files[idx++] = (IRemoteFile)i.next();
}
}
return files;
}
/**
* Get the first selected file or folder
*/
protected IRemoteFile getFirstSelectedFile()
{
if (files == null)
getSelectedFiles();
if (files.length > 0)
return files[0];
else
return null;
}
// ------------------
// PRIVATE METHODS...
// ------------------
/**
* Get the currently selected IRemoteFile objects
*/
protected IRemoteFile[] getSelectedFiles()
{
if (files == null)
{
IStructuredSelection selection = getSelection();
files = new IRemoteFile[selection.size()];
Iterator i = selection.iterator();
int idx=0;
while (i.hasNext())
{
files[idx++] = (IRemoteFile)i.next();
}
}
return files;
}
/**
* Get the first selected file or folder
*/
protected IRemoteFile getFirstSelectedFile()
{
if (files == null)
getSelectedFiles();
if (files.length > 0)
return files[0];
else
return null;
}
/**
* The user has selected a remote object. Return null if OK is to be enabled, or a SystemMessage
@ -614,5 +646,5 @@ public class SystemCopyRemoteFileAction extends SystemBaseCopyAction
public SystemMessage isValid(IHost selectedConnection, Object[] selectedObjects, ISystemRemoteElementAdapter[] remoteAdaptersForSelectedObjects)
{
return null;
}
}
}

View file

@ -1,5 +1,5 @@
/********************************************************************************
* Copyright (c) 2002, 2007 IBM Corporation and others. All rights reserved.
* Copyright (c) 2002, 2008 IBM Corporation and others. 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
@ -21,9 +21,12 @@
* Xuan Chen (IBM) - [209827] Update DStore command implementation to enable cancelation of archive operations
* David McKnight (IBM) - [216252] [api][nls] Resource Strings specific to subsystems should be moved from rse.ui into files.ui / shells.ui / processes.ui where possible
* David McKnight (IBM) - [220547] [api][breaking] SimpleSystemMessage needs to specify a message id and some messages should be shared
* Rupen Mardirossian (IBM) - [210682] Modified MoveRemoteFileJob.runInWorkspace to use SystemCopyDialog for collisions in move operations
********************************************************************************/
package org.eclipse.rse.internal.files.ui.actions;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import org.eclipse.core.resources.WorkspaceJob;
@ -50,7 +53,9 @@ import org.eclipse.rse.ui.actions.SystemBaseCopyAction;
import org.eclipse.rse.ui.messages.SystemMessageDialog;
import org.eclipse.rse.ui.validators.IValidatorRemoteSelection;
import org.eclipse.rse.ui.view.ISystemRemoteElementAdapter;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.rse.internal.ui.dialogs.CopyRunnable;
/**
* Move selected files and folders action.
@ -84,65 +89,103 @@ public class SystemMoveRemoteFileAction extends SystemCopyRemoteFileAction
IStatus status = Status.OK_STATUS;
try
{
int steps = oldObjects.length;
monitor.beginTask(msg.getLevelOneText(), steps);
copiedOk = true;
String oldName = null;
String newName = null;
Object oldObject = null;
newNames = new String[oldNames.length];
for (int idx=0; copiedOk && (idx<steps); idx++)
{
oldName = oldNames[idx];
oldObject = oldObjects[idx];
monitor.subTask(getCopyingMessage(oldName).getLevelOneText());
newName = checkForCollision(getShell(), monitor, targetContainer, oldObject, oldName);
if (newName == null)
copiedOk = false;
else
//holds existing objects
List existing = new ArrayList();
//holds objects to be copied
List toCopy = new ArrayList();
boolean overwrite = false;
int steps = oldObjects.length;
monitor.beginTask(msg.getLevelOneText(), steps);
copiedOk = true;
String oldName = null;
String newName = null;
Object oldObject = null;
newNames = new String[oldNames.length];
//go through all files to see if they exist
for (int idx=0; copiedOk && (idx<steps); idx++)
{
oldName = oldNames[idx];
oldObject = oldObjects[idx];
//monitor.subTask(getCopyingMessage(oldName).getLevelOneText());
if(checkForCollision(getShell(), monitor, targetContainer, oldName))
{
existing.add(oldObject);
}
toCopy.add(oldObject);
/*newName = checkForCollision(getShell(), monitor, targetContainer, oldObject, oldName);
if (newName == null)
copiedOk = false;
else
copiedOk = doCopy(targetContainer, oldObject, newName, monitor);
newNames[idx] = newName;
monitor.worked(1);
movedFileNames.add(oldName); //remember the old name, in case we need it later.
}
monitor.done();
}
catch (SystemMessageException exc)
newNames[idx] = newName;
monitor.worked(1);
movedFileNames.add(oldName);*/ //remember the old name, in case we need it later.
}
//monitor.done();
//SystemCopyDialog used here with all existing objects
if(existing.size()>0)
{
copiedOk = false;
//If this operation is canceled, need to display a proper message to the user.
if (monitor.isCanceled() && movedFileNames.size() > 0)
CopyRunnable cr = new CopyRunnable(existing);
Display.getDefault().syncExec(cr);
overwrite = cr.getOk();
if(!overwrite)
{
//Get the moved file names
String movedFileNamesList = (String)(movedFileNames.get(0));
for (int i=1; i<(movedFileNames.size()); i++)
status = Status.CANCEL_STATUS;
}
}
//Proceed with copy if user chose to overwrite or there were no copy collisions
if(existing.size()==0 || overwrite)
{
try
{
for (int idx=0; copiedOk && (idx<steps); idx++)
{
movedFileNamesList = movedFileNamesList + "\n" + (String)(movedFileNames.get(i)); //$NON-NLS-1$
}
String msgTxt = FileResources.FILEMSG_MOVE_INTERRUPTED;
String msgDetails = NLS.bind(FileResources.FILEMSG_MOVE_INTERRUPTED_DETAILS, movedFileNamesList);
newName = oldNames[idx];
oldObject = oldObjects[idx];
monitor.subTask(getCopyingMessage(newName).getLevelOneText());
copiedOk = doCopy(targetContainer, oldObject, newName, monitor);
monitor.worked(1);
newNames[idx] = newName;
movedFileNames.add(newName);
monitor.done();
}
}
catch (SystemMessageException exc)
{
copiedOk = false;
//If this operation is canceled, need to display a proper message to the user.
if (monitor.isCanceled() && movedFileNames.size() > 0)
{
//Get the moved file names
String movedFileNamesList = (String)(movedFileNames.get(0));
for (int i=1; i<(movedFileNames.size()); i++)
{
movedFileNamesList = movedFileNamesList + "\n" + (String)(movedFileNames.get(i)); //$NON-NLS-1$
}
String msgTxt = FileResources.FILEMSG_MOVE_INTERRUPTED;
String msgDetails = NLS.bind(FileResources.FILEMSG_MOVE_INTERRUPTED_DETAILS, movedFileNamesList);
SystemMessage thisMessage = new SimpleSystemMessage(Activator.PLUGIN_ID,
ISystemFileConstants.FILEMSG_MOVE_INTERRUPTED,
IStatus.ERROR, msgTxt, msgDetails);
SystemMessageDialog.displayErrorMessage(shell, thisMessage);
status = Status.CANCEL_STATUS;
status = Status.CANCEL_STATUS;
}
else
{
SystemMessageDialog.displayErrorMessage(shell, exc.getSystemMessage());
}
}
else
catch (Exception exc)
{
SystemMessageDialog.displayErrorMessage(shell, exc.getSystemMessage());
copiedOk = false;
exc.printStackTrace();
}
}
catch (Exception exc)
{
copiedOk = false;
exc.printStackTrace();
}
if (movedFiles.size() > 0)
{
copyComplete(); //Need to reflect the views.
@ -150,8 +193,7 @@ public class SystemMoveRemoteFileAction extends SystemCopyRemoteFileAction
return status;
}
}
}
/**
* Constructor
*/

View file

@ -48,6 +48,7 @@
* David McKnight (IBM) - [216252] MessageFormat.format -> NLS.bind
* David McKnight (IBM) - [220547] [api][breaking] SimpleSystemMessage needs to specify a message id and some messages should be shared
* Xuan Chen (IBM) - [223126] [api][breaking] Remove API related to User Actions in RSE Core/UI
* Rupen Mardirossian (IBM) - [210682] Copy collisions will use SystemCopyDialog now instead of renameDialog when there is a copy collision within the same connection
*******************************************************************************/
package org.eclipse.rse.internal.files.ui.view;
@ -113,6 +114,7 @@ import org.eclipse.rse.internal.files.ui.actions.SystemSearchAction;
import org.eclipse.rse.internal.files.ui.resources.SystemRemoteEditManager;
import org.eclipse.rse.internal.subsystems.files.core.ISystemFilePreferencesConstants;
import org.eclipse.rse.internal.ui.SystemResources;
import org.eclipse.rse.internal.ui.dialogs.CopyRunnable;
import org.eclipse.rse.internal.ui.view.ISystemMementoConstants;
import org.eclipse.rse.internal.ui.view.SystemDNDTransferRunnable;
import org.eclipse.rse.internal.ui.view.SystemViewResources;
@ -1970,7 +1972,6 @@ public class SystemViewRemoteFileAdapter
ISystemFileConstants.FILEMSG_SECURITY_ERROR,
IStatus.ERROR, msgTxt, msgDetails);
resultSet.setMessage(errorMsg);
return resultSet;
}
@ -2021,7 +2022,7 @@ public class SystemViewRemoteFileAdapter
}
}
}
//getMessage("RSEG1125").makeSubstitution(movedFileName));
if (copiedFileNames != null)
{
String msgTxt = FileResources.FILEMSG_COPY_INTERRUPTED;
@ -2031,6 +2032,7 @@ public class SystemViewRemoteFileAdapter
ISystemFileConstants.FILEMSG_COPY_INTERRUPTED,
IStatus.ERROR, msgTxt, msgDetails);
resultSet.setMessage(thisMessage);
//SystemMessageDialog.displayErrorMessage(shell, thisMessage);
}
}
}
@ -2096,10 +2098,12 @@ public class SystemViewRemoteFileAdapter
}
else if (first instanceof IRemoteFile)
{
List toCopy = new ArrayList();
List toCopyNames = new ArrayList();
//List toCopy = new ArrayList();
//List toCopyNames = new ArrayList();
List toCopyBatch = new ArrayList();
List existing = new ArrayList();
boolean overwrite=false;
for (int i = 0; i < set.size(); i++)
{
IRemoteFile srcFileOrFolder = (IRemoteFile)set.get(i);
@ -2133,27 +2137,30 @@ public class SystemViewRemoteFileAdapter
{
try
{
if (!targetFolder.getAbsolutePath().equals(srcFileOrFolder.getAbsolutePath()))
if (!targetFolder.getAbsolutePath().equals(srcFileOrFolder.getAbsolutePath()) && !targetFolder.getAbsolutePath().equals(srcFileOrFolder.getParentRemoteFile().getAbsolutePath()))
{
// should be better doing a query for all in the set
IRemoteFile existingFileOrFolder = ((IRemoteFileSubSystem)srcSubSystem).getRemoteFileObject(targetFolder, name, monitor);
if (existingFileOrFolder.exists())
{
RenameRunnable rr = new RenameRunnable(existingFileOrFolder, toCopyNames);
/*RenameRunnable rr = new RenameRunnable(existingFileOrFolder, toCopyNames);
Display.getDefault().syncExec(rr);
name = rr.getNewName();
if (name != null)
{
toCopy.add(srcFileOrFolder);
toCopyNames.add(name);
}
*/
existing.add(existingFileOrFolder);
}
else if (name != null)
if (name != null)
{
//toCopy.add(srcFileOrFolder);
//toCopyNames.add(name);
toCopyBatch.add(srcFileOrFolder);
}
/*else if (name != null)
{
toCopyBatch.add(srcFileOrFolder);
}*/
}
}
catch (Exception e)
@ -2167,161 +2174,175 @@ public class SystemViewRemoteFileAdapter
}
}
for (int x = 0; x < toCopy.size(); x++)
{
IRemoteFile srcFileOrFolder = (IRemoteFile)toCopy.get(x);
String name = (String)toCopyNames.get(x);
/*
if(existing.size()>0)
{
CopyRunnable rr = new CopyRunnable(existing);
Display.getDefault().syncExec(rr);
overwrite = rr.getOk();
}
//Following code for renaming dialog copying procedures is not required
/*if(existing.size()==0 || overwrite)
{
for (int x = 0; x < toCopy.size(); x++)
{
IRemoteFile srcFileOrFolder = (IRemoteFile)toCopy.get(x);
String name = (String)toCopyNames.get(x);
SystemMessage copyMessage = RSEUIPlugin.getPluginMessage(ISystemMessages.MSG_COPY_PROGRESS);
copyMessage.makeSubstitution(srcFileOrFolder.getName(), targetFolder.getName());
if (monitor != null)
{
monitor.beginTask(copyMessage.getLevelOneText(), 100);
}
*/
try
{
if (targetFS.copy(srcFileOrFolder, targetFolder, name, monitor))
try
{
IRemoteFile copiedFile = targetFS.getRemoteFileObject(targetFolder, name, monitor);
resultSet.addResource(copiedFile);
}
else
{
// need a failed message here
String msgTxt = NLS.bind(FileResources.FILEMSG_COPY_FILE_FAILED, srcFileOrFolder.getAbsolutePath());
String msgDetails = FileResources.FILEMSG_COPY_FILE_FAILED_DETAILS;
if (targetFS.copy(srcFileOrFolder, targetFolder, name, monitor))
{
IRemoteFile copiedFile = targetFS.getRemoteFileObject(targetFolder, name, monitor);
resultSet.addResource(copiedFile);
}
else
{
// need a failed message here
String msgTxt = NLS.bind(FileResources.FILEMSG_COPY_FILE_FAILED, srcFileOrFolder.getAbsolutePath());
String msgDetails = FileResources.FILEMSG_COPY_FILE_FAILED_DETAILS;
SystemMessage msg = new SimpleSystemMessage(Activator.PLUGIN_ID,
ISystemFileConstants.FILEMSG_COPY_FILE_FAILED,
IStatus.ERROR, msgTxt, msgDetails);
resultSet.setMessage(msg);
}
}
}
catch (SystemMessageException e)
{
if (monitor.isCanceled() && resultSet.size() > 0)
catch (SystemMessageException e)
{
//Get the moved file names
Object thisObject = resultSet.get(0);
String copiedFileNames = null;
if (thisObject instanceof IRemoteFile)
if (monitor.isCanceled() && resultSet.size() > 0)
{
copiedFileNames = ((IRemoteFile)thisObject).getName();
for (int i=1; i<(resultSet.size()); i++)
//Get the moved file names
Object thisObject = resultSet.get(0);
String copiedFileNames = null;
if (thisObject instanceof IRemoteFile)
{
if (thisObject instanceof IRemoteFile)
copiedFileNames = ((IRemoteFile)thisObject).getName();
for (int i=1; i<(resultSet.size()); i++)
{
copiedFileNames = copiedFileNames + "\n" + ((IRemoteFile)thisObject).getName(); //$NON-NLS-1$
if (thisObject instanceof IRemoteFile)
{
copiedFileNames = copiedFileNames + "\n" + ((IRemoteFile)thisObject).getName(); //$NON-NLS-1$
}
}
}
}
//getMessage("RSEG1125").makeSubstitution(movedFileName));
if (copiedFileNames != null)
{
String msgTxt = FileResources.FILEMSG_COPY_INTERRUPTED;
String msgDetails = NLS.bind(FileResources.FILEMSG_COPY_INTERRUPTED_DETAILS, copiedFileNames);
//getMessage("RSEG1125").makeSubstitution(movedFileName));
if (copiedFileNames != null)
{
String msgTxt = FileResources.FILEMSG_COPY_INTERRUPTED;
String msgDetails = NLS.bind(FileResources.FILEMSG_COPY_INTERRUPTED_DETAILS, copiedFileNames);
SystemMessage thisMessage = new SimpleSystemMessage(Activator.PLUGIN_ID,
ISystemFileConstants.FILEMSG_COPY_INTERRUPTED,
IStatus.ERROR, msgTxt, msgDetails);
SystemMessageDialog.displayErrorMessage(shell, thisMessage);
}
else
{
SystemMessageDialog.displayMessage(e);
}
}
else
{
SystemMessageDialog.displayMessage(e);
}
}
else
catch (Exception e)
{
SystemMessageDialog.displayMessage(e);
e.printStackTrace();
}
}
catch (Exception e)
}*/
// deal with batch copies now
if(existing.size()==0 || overwrite)
{
IRemoteFile[] srcFileOrFolders = new IRemoteFile[toCopyBatch.size()];
for (int x = 0; x < toCopyBatch.size(); x++)
{
e.printStackTrace();
srcFileOrFolders[x] = (IRemoteFile)toCopyBatch.get(x);
}
}
// deal with batch copies now
IRemoteFile[] srcFileOrFolders = new IRemoteFile[toCopyBatch.size()];
for (int x = 0; x < toCopyBatch.size(); x++)
{
srcFileOrFolders[x] = (IRemoteFile)toCopyBatch.get(x);
}
if (toCopyBatch.size() > 0)
{
try
if (toCopyBatch.size() > 0)
{
if (targetFS.copyBatch(srcFileOrFolders, targetFolder, monitor))
try
{
for (int x = 0; x < toCopyBatch.size(); x++)
if (targetFS.copyBatch(srcFileOrFolders, targetFolder, monitor))
{
IRemoteFile copiedFile = targetFS.getRemoteFileObject(targetFolder, srcFileOrFolders[x].getName(), monitor);
resultSet.addResource(copiedFile);
for (int x = 0; x < toCopyBatch.size(); x++)
{
IRemoteFile copiedFile = targetFS.getRemoteFileObject(targetFolder, srcFileOrFolders[x].getName(), monitor);
resultSet.addResource(copiedFile);
}
}
}
}
catch (SystemMessageException e)
{
if (monitor.isCanceled() && srcFileOrFolders.length > 1)
catch (SystemMessageException e)
{
//ISystemViewElementAdapter adapter = fromSet.getViewAdapter();
for (int i = 0; i < srcFileOrFolders.length; i++)
if (monitor.isCanceled() && srcFileOrFolders.length > 1)
{
IRemoteFile thisCopiedFile = null;
try
//ISystemViewElementAdapter adapter = fromSet.getViewAdapter();
for (int i = 0; i < srcFileOrFolders.length; i++)
{
thisCopiedFile = targetFS.getRemoteFileObject(targetFolder, srcFileOrFolders[i].getName(), null);
IRemoteFile thisCopiedFile = null;
try
{
thisCopiedFile = targetFS.getRemoteFileObject(targetFolder, srcFileOrFolders[i].getName(), null);
}
catch (SystemMessageException thsiException)
{
thsiException.printStackTrace();
thisCopiedFile = null;
}
if (thisCopiedFile != null && thisCopiedFile.exists())
{
//This object has been deleted
resultSet.addResource(thisCopiedFile);
}
}
catch (SystemMessageException thsiException)
if (resultSet.size() > 0)
{
thsiException.printStackTrace();
thisCopiedFile = null;
}
if (thisCopiedFile != null && thisCopiedFile.exists())
{
//This object has been deleted
resultSet.addResource(thisCopiedFile);
}
}
if (resultSet.size() > 0)
{
//Get the copied file names
Object thisObject = resultSet.get(0);
String copiedFileNames = null;
copiedFileNames = ((IRemoteFile)thisObject).getName();
for (int i=1; i<(resultSet.size()); i++)
{
thisObject = resultSet.get(i);
copiedFileNames = copiedFileNames + "\n" + ((IRemoteFile)resultSet.get(i)).getName(); //$NON-NLS-1$
}
String msgTxt = FileResources.FILEMSG_COPY_INTERRUPTED;
String msgDetails = NLS.bind(FileResources.FILEMSG_COPY_INTERRUPTED_DETAILS, copiedFileNames);
//Get the copied file names
Object thisObject = resultSet.get(0);
String copiedFileNames = null;
copiedFileNames = ((IRemoteFile)thisObject).getName();
for (int i=1; i<(resultSet.size()); i++)
{
thisObject = resultSet.get(i);
copiedFileNames = copiedFileNames + "\n" + ((IRemoteFile)resultSet.get(i)).getName(); //$NON-NLS-1$
}
String msgTxt = FileResources.FILEMSG_COPY_INTERRUPTED;
String msgDetails = NLS.bind(FileResources.FILEMSG_COPY_INTERRUPTED_DETAILS, copiedFileNames);
SystemMessage thisMessage = new SimpleSystemMessage(Activator.PLUGIN_ID,
ISystemFileConstants.FILEMSG_COPY_INTERRUPTED,
IStatus.ERROR, msgTxt, msgDetails);
SystemMessageDialog.displayErrorMessage(shell, thisMessage);
SystemMessage thisMessage = new SimpleSystemMessage(Activator.PLUGIN_ID,
ISystemFileConstants.FILEMSG_COPY_INTERRUPTED,
IStatus.ERROR, msgTxt, msgDetails);
SystemMessageDialog.displayErrorMessage(shell, thisMessage);
}
else
{
SystemMessageDialog.displayMessage(e);
}
}
else
{
SystemMessageDialog.displayMessage(e);
}
}
else
catch (Exception e)
{
SystemMessageDialog.displayMessage(e);
e.printStackTrace();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}
@ -2329,7 +2350,6 @@ public class SystemViewRemoteFileAdapter
}
return resultSet;
}
/**
* Perform a copy via drag and drop.
* @param src the object to be copied. If the target and source are not on the same system, then this is a

View file

@ -17,6 +17,7 @@
* David McKnight (IBM) - [210229] table refresh needs unique table-specific tooltip-text
* David McKnight (IBM) - [216252] [nls] Resource Strings specific to subsystems should be moved from rse.ui into files.ui / shells.ui / processes.ui where possible
* David McKnight (IBM) - [223103] [cleanup] fix broken externalized strings
* Rupen Mardirossian (IBM) - [210682] Added BUTTON_OVERWRITE_ALL & and tooltip, also added some verbiage for new SystemCopyDialog.
*******************************************************************************/
package org.eclipse.rse.internal.ui;
@ -43,6 +44,9 @@ public class SystemResources extends NLS
public static String BUTTON_CREATE_TOOLTIP;
public static String BUTTON_CANCEL_ALL;
public static String BUTTON_CANCEL_ALL_TOOLTIP;
public static String BUTTON_OVERWRITE_ALL;
public static String BUTTON_OVERWRITE_ALL_TOOLTIP;
// THESE TERMS ARE USED POTENTIALLY ANYWHERE
public static String TERM_YES;
@ -127,6 +131,9 @@ public class SystemResources extends NLS
public static String RESID_COLLISION_RENAME_TITLE;
public static String RESID_COLLISION_RENAME_VERBIAGE;
public static String RESID_COLLISION_RENAME_LABEL;
public static String RESID_COLLISION_RENAME_TOOLTIP;
public static String RESID_COLLISION_COPY_VERBIAGE;
public static String RESID_COLLISION_COPY_COLHDG_OLDNAME;
// -------------------------

View file

@ -18,6 +18,7 @@
# David Dykstal (IBM) - [181331] new filter wizard title should be "New Filter"
# David Dykstal (IBM) - [142452] copy operations for connections, filterpools, and filters should be named "Copy..."
# David McKnight (IBM) - [223103] [cleanup] fix broken externalized strings
# Rupen Mardirossian (IBM) - [210692] Define strings for SystemCopyDialog
################################################################################
# NLS_MESSAGEFORMAT_VAR
@ -33,6 +34,9 @@ BUTTON_ADD=Add
BUTTON_CREATE_LABEL=Create
BUTTON_CREATE_TOOLTIP=Press to create the new resource
BUTTON_CANCEL_ALL = Cancel All
BUTTON_CANCEL_ALL_TOOLTIP = Cancel for all
BUTTON_OVERWRITE_ALL = Overwrite All
BUTTON_OVERWRITE_ALL_TOOLTIP = Overwrite for all
TERM_YES=Yes
TERM_NO=No
@ -180,6 +184,9 @@ RESID_MOVE_TARGET_FILTERPOOL_PROMPT=Select the filter pool to move into
RESID_COLLISION_RENAME_TITLE=Duplicate Name Collision
RESID_COLLISION_RENAME_VERBIAGE=A resource named "&1" already exists.
RESID_COLLISION_RENAME_LABEL=Rename to
RESID_COLLISION_RENAME_TOOLTIP=Enter unique new resource name
RESID_COLLISION_COPY_VERBIAGE=The following resources already exist. Would you like to overwrite all of the existing resources or cancel the operation?
RESID_COLLISION_COPY_COLHDG_OLDNAME=Resource
#=============================================================

View file

@ -0,0 +1,38 @@
/********************************************************************************
* Copyright (c) 2008 IBM Corporation and others. 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
*
* Contributors:
* Rupen Mardirossian (IBM) - [210693] Created class to run SystemCopyDialog for enhancement defect.
********************************************************************************/
package org.eclipse.rse.internal.ui.dialogs;
import java.util.List;
public class CopyRunnable implements Runnable
{
private boolean _ok;
private List _existingNames;
private SystemCopyDialog dlg;
public CopyRunnable(List existing)
{
_existingNames = existing;
}
public void run() {
dlg = new SystemCopyDialog(null, _existingNames);
dlg.open();
if (!dlg.wasCancelled())
_ok = true;
else
_ok = false;
}
public boolean getOk()
{
return _ok;
}
}

View file

@ -0,0 +1,156 @@
/********************************************************************************
* Copyright (c) 2008 IBM Corporation and others. 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
*
* Contributors:
* Rupen Mardirossian (IBM) - [210693] Created Dialog for enhancement defect
********************************************************************************/
package org.eclipse.rse.internal.ui.dialogs;
import java.util.List;
import org.eclipse.jface.viewers.ColumnLayoutData;
import org.eclipse.jface.viewers.ColumnPixelData;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.rse.internal.ui.SystemResources;
import org.eclipse.rse.internal.ui.dialogs.SystemCopyTableProvider;
import org.eclipse.rse.ui.SystemWidgetHelpers;
import org.eclipse.rse.ui.dialogs.SystemPromptDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
/**
* Dialog for confirming overwriting of resources when copy collision occurs.
*
* This dialog is a mirror copy of the SystemDeleteDialog with a few changes
*
*/
public class SystemCopyDialog extends SystemPromptDialog
{
private String verbiage;
private SystemCopyTableProvider sctp;
private Table table;
private TableViewer tableViewer;
private GridData tableData;
private List collisions;
// column layout
private ColumnLayoutData columnLayouts[] =
{
new ColumnPixelData(19, false),
new ColumnWeightData(150,150,true)
};
// column headers
private String columnHeaders[] = {
"", //$NON-NLS-1$
SystemResources.RESID_COLLISION_COPY_COLHDG_OLDNAME
};
/**
* Constructor when you have your list of files and would like to use default title.
*/
public SystemCopyDialog(Shell shell, List files)
{
this(shell, SystemResources.RESID_COPY_TITLE, files);
}
/**
* Constructor when you have your own title and list of files.
*/
public SystemCopyDialog(Shell shell, String title, List files)
{
super(shell, title);
setOkButtonLabel(SystemResources.BUTTON_OVERWRITE_ALL);
setOkButtonToolTipText(SystemResources.BUTTON_OVERWRITE_ALL_TOOLTIP);
setCancelButtonLabel(SystemResources.BUTTON_CANCEL_ALL);
setCancelButtonToolTipText(SystemResources.BUTTON_CANCEL_ALL_TOOLTIP);
collisions=files;
}
/**
* @see SystemPromptDialog#createInner(Composite)
*/
protected Control createInner(Composite parent)
{
// Inner composite
int nbrColumns = 1;
Composite composite = SystemWidgetHelpers.createComposite(parent, nbrColumns);
if (verbiage != null)
SystemWidgetHelpers.createVerbiage(composite, verbiage, nbrColumns, false, 200);
else
SystemWidgetHelpers.createVerbiage(composite, SystemResources.RESID_COLLISION_COPY_VERBIAGE, nbrColumns, false, 200);
// TABLE
tableViewer = createTableViewer(composite, nbrColumns);
createColumns();
sctp = new SystemCopyTableProvider();
int width = tableData.widthHint;
int nbrRows = Math.min(collisions.size(),8);
int rowHeight = table.getItemHeight() + table.getGridLineWidth();
int sbHeight = table.getHorizontalBar().getSize().y;
int height = (nbrRows * rowHeight) + sbHeight;
tableData.heightHint = height;
table.setLayoutData(tableData);
table.setSize(width, height);
tableViewer.setLabelProvider(sctp);
tableViewer.setContentProvider(sctp);
tableViewer.setInput(collisions);
return composite;
}
/**
* Creates and returns TableViewer
*/
private TableViewer createTableViewer(Composite parent, int nbrColumns)
{
table = new Table(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.HIDE_SELECTION);
table.setLinesVisible(true);
tableViewer = new TableViewer(table);
tableData = new GridData();
tableData.horizontalAlignment = GridData.FILL;
tableData.grabExcessHorizontalSpace = true;
tableData.widthHint = 350;
tableData.heightHint = 30;
tableData.verticalAlignment = GridData.CENTER;
tableData.grabExcessVerticalSpace = true;
tableData.horizontalSpan = nbrColumns;
table.setLayoutData(tableData);
return tableViewer;
}
protected Control getInitialFocusControl()
{
return null;
}
private void createColumns()
{
TableLayout layout = new TableLayout();
table.setLayout(layout);
table.setHeaderVisible(true);
for (int i = 0; i < columnHeaders.length; i++)
{
layout.addColumnData(columnLayouts[i]);
TableColumn tc = new TableColumn(table, SWT.NONE,i);
tc.setResizable(columnLayouts[i].resizable);
tc.setText(columnHeaders[i]);
}
}
}

View file

@ -0,0 +1,160 @@
/********************************************************************************
* Copyright (c) 2008 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
*
* Contributors:
* Rupen Mardirossian (IBM) - [210682] Created for SystemCopyDialog
********************************************************************************/
package org.eclipse.rse.internal.ui.dialogs;
import java.util.Collection;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.graphics.Image;
/**
* This class is the table provider class for the SystemCopyDialog
*/
public class SystemCopyTableProvider implements ITableLabelProvider, IStructuredContentProvider
{
static final int COLUMN_IMAGE = 0;
static final int COLUMN_NAME = 1;
protected Map imageTable = new Hashtable(20);
protected Object[] children = null;
/**
* Constructor for SystemCopyTableProvider
*/
public SystemCopyTableProvider()
{
super();
}
private SystemCopyTableRow getTableRow(Object element)
{
return (SystemCopyTableRow)element;
}
private Image getImageFromDescriptor(ImageDescriptor descriptor)
{
if (descriptor == null)
return null;
//obtain the cached image corresponding to the descriptor
Image image = (Image) imageTable.get(descriptor);
if (image == null)
{
image = descriptor.createImage();
imageTable.put(descriptor, image);
}
//System.out.println("...image = " + image);
return image;
}
/**
* @see ITableLabelProvider#getColumnImage(java.lang.Object, int)
*/
public Image getColumnImage(Object element, int column)
{
if (column == COLUMN_IMAGE)
return getImageFromDescriptor(getTableRow(element).getImageDescriptor());
else
return null;
}
/**
* @see ITableLabelProvider#getColumnText(java.lang.Object, int)
*/
public String getColumnText(Object element, int column)
{
String text = ""; //$NON-NLS-1$
if (column == COLUMN_NAME)
text = getTableRow(element).getName();
return text;
}
/**
* @see IBaseLabelProvider#addListener(ILabelProviderListener)
*/
public void addListener(ILabelProviderListener listener)
{
}
/**
* @see IBaseLabelProvider#dispose()
*/
public void dispose()
{
// The following we got from WorkbenchLabelProvider
if (imageTable != null)
{
Collection imageValues = imageTable.values();
if (imageValues!=null)
{
Iterator images = imageValues.iterator();
if (images!=null)
while (images.hasNext())
((Image)images.next()).dispose();
imageTable = null;
}
}
}
/**
* @see IBaseLabelProvider#isLabelProperty(java.lang.Object, java.lang.String)
*/
public boolean isLabelProperty(Object element, String property)
{
return true;
}
/**
* @see IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
*/
public void removeListener(ILabelProviderListener listener)
{
}
/**
* Return rows. Input must be an IStructuredSelection.
*/
public Object[] getElements(Object inputElement)
{
if (children == null)
{
List list = (List)inputElement;
children = new SystemCopyTableRow[list.size()];
for(int i=0;i<list.size();i++)
{
children[i] = new SystemCopyTableRow(list.get(i), i);
}
}
return children;
}
/**
* Return the 0-based row number of the given element.
*/
public int getRowNumber(SystemCopyTableRow row)
{
return row.getRowNumber();
}
/**
*
*/
public void inputChanged(Viewer viewer, Object oldInput, Object newInput)
{
}
}

View file

@ -0,0 +1,180 @@
/********************************************************************************
* Copyright (c) 2008 IBM Corporation and others. 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
*
* Contributors:
* Rupen Mardirossian (IBM) - [210682] created for SystemCopyDialog
********************************************************************************/
package org.eclipse.rse.internal.ui.dialogs;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.rse.core.filters.ISystemFilterPoolReference;
import org.eclipse.rse.internal.ui.view.SystemViewResources;
import org.eclipse.rse.ui.ISystemIconConstants;
import org.eclipse.rse.ui.RSEUIPlugin;
import org.eclipse.rse.ui.dialogs.ISystemTypedObject;
import org.eclipse.rse.ui.dialogs.SystemSimpleContentElement;
import org.eclipse.rse.ui.view.ISystemRemoteElementAdapter;
import org.eclipse.rse.ui.view.ISystemViewElementAdapter;
import org.eclipse.rse.ui.view.SystemAdapterHelpers;
/**
* Represents one row in the table in the SystemCopyDialog dialog.
*/
public class SystemCopyTableRow
{
private Object element;
private String name;
private String type;
private ImageDescriptor imageDescriptor;
private ISystemViewElementAdapter adapter;
private ISystemRemoteElementAdapter remoteAdapter;
private int rowNbr = 0;
public SystemCopyTableRow(Object element, int rowNbr)
{
if (element instanceof SystemSimpleContentElement)
element = ((SystemSimpleContentElement)element).getData();
this.element = element;
this.adapter = getViewAdapter(element);
this.remoteAdapter = getRemoteAdapter(element);
this.rowNbr = rowNbr;
//this.oldName = getAdapter(element).getText(element);
if (adapter != null)
this.name = adapter.getName(element);
else
{
if (element instanceof ISystemTypedObject)
this.name = ((ISystemTypedObject)element).getName();
else if (element instanceof IResource)
this.name = ((IResource)element).getName();
}
ISystemViewElementAdapter typeAdapter = adapter;
Object typeElement = element;
if (typeElement instanceof ISystemFilterPoolReference)
{
typeElement = ((ISystemFilterPoolReference)typeElement).getReferencedFilterPool();
typeAdapter = getViewAdapter(typeElement);
}
if (typeAdapter != null)
this.type = typeAdapter.getType(typeElement);
else
{
if (element instanceof ISystemTypedObject)
this.type = ((ISystemTypedObject)element).getType();
else if (element instanceof IResource)
{
if ((element instanceof IFolder) || (element instanceof IProject))
this.type = SystemViewResources.RESID_PROPERTY_FILE_TYPE_FOLDER_VALUE;
else
this.type = SystemViewResources.RESID_PROPERTY_FILE_TYPE_FILE_VALUE;
}
else
this.type = element.getClass().getName();
}
if (adapter != null)
this.imageDescriptor = adapter.getImageDescriptor(element);
else if (element instanceof ISystemTypedObject)
this.imageDescriptor = ((ISystemTypedObject)element).getImageDescriptor();
else if (element instanceof IFolder)
this.imageDescriptor = //PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_OBJ_FOLDER);
RSEUIPlugin.getDefault().getImageDescriptor(ISystemIconConstants.ICON_SYSTEM_FOLDER_ID);
else if (element instanceof IFile)
this.imageDescriptor = RSEUIPlugin.getDefault().getWorkbench().getEditorRegistry().getImageDescriptor(name);
}
/**
* Return the name of the item to be copy
* @return display name of the item.
*/
public String getName()
{
return name;
}
/**
* Return the resource type of the item to be copy
* @return resource type of the item
*/
public String getType()
{
return type;
}
/**
* Return the 0-based row number of this item
* @return 0-based row number
*/
public int getRowNumber()
{
return rowNbr;
}
/**
* Returns an image descriptor for the image. More efficient than getting the image.
*/
public ImageDescriptor getImageDescriptor()
{
return imageDescriptor;
}
/**
* Get the input object this row represents
*/
public Object getElement()
{
return element;
}
/**
* Get the input object adapter for the input object this row represents
*/
public ISystemViewElementAdapter getViewAdapter()
{
return adapter;
}
/**
* Get the input object remote adapter for the input object this row represents
*/
public ISystemRemoteElementAdapter getRemoteAdapter()
{
return remoteAdapter;
}
/**
* Return true if this is a remote object
*/
public boolean isRemote()
{
return (remoteAdapter != null);
}
/**
* Returns the implementation of ISystemViewElement for the given
* object. Returns null if the adapter is not defined or the
* object is not adaptable.
*/
protected ISystemViewElementAdapter getViewAdapter(Object o)
{
return SystemAdapterHelpers.getViewAdapter(o);
}
/**
* Returns the implementation of ISystemRemoteElement for the given
* object. Returns null if this object does not adaptable to this.
*/
protected ISystemRemoteElementAdapter getRemoteAdapter(Object o)
{
return SystemAdapterHelpers.getRemoteAdapter(o);
}
public String toString()
{
return name;
}
}