我想为任何文件覆盖eclipse的现有粘贴功能如果有人已经做了这种更改,请帮助我

问题描述

我尝试使用IResourceChangeListener和IResourceDeltaVisitor,并在粘贴文件后使用IResourceDelta增量获取文件。如果文件在该文件夹中已经存在,我将使用它打开重命名选项对话框。我将原始文件内容复制到新文件,该文件的名称是通过对话框指定的,并将该文件创建到文件夹后,我将删除旧文件。但是我想要现有的eclipse粘贴功能的代码,以便在可能的情况下覆盖代码并根据我的要求进行更改。

下面是IResourceChangeListener和IResourceDeltaVisitor的代码:

public class ResourceChangeListener implements IResourceChangeListener {

    @Override
    public void resourceChanged(IResourceChangeEvent event) {
        if (event.getType() == IResourceChangeEvent.POST_BUILD || event.getType() == IResourceChangeEvent.PRE_BUILD) {
            try {
                event.getDelta().accept(new DeltaPrinter());
            } catch (CoreException e) {
                e.printStackTrace();
            }
        }
    }
}


public class DeltaPrinter implements IResourceDeltaVisitor {

    Integer fileCount = 0;

    @Override
    public boolean visit(IResourceDelta delta) {

        Display.getDefault().syncExec(new Runnable() {
            public void run() {
                IResource resource = delta.getResource();
                if ((delta.getKind() == IResourceDelta.ADDED) && resource != null) {
                    IProject project = resource.getProject();
                    if (project != null && resource.getProjectRelativePath() != null) {
                        IFile file = project.getFile(resource.getProjectRelativePath());
                        String projectLocation = project.getLocation().toString();
                        IPath projectFolder = new Path(projectLocation);
                        IFolder folder = ResourcesPlugin.getWorkspace().getRoot().getFolder(projectFolder);
                        fileCount = 0;
                        if (file.exists() && file.getName().contains(".job")
                                && traverseToCheckIfFileAlreadyExists(folder.getFullPath().toString(),file.getName(),false) > 1) {
                            if (OSValidator.isWindows() && !file.getFullPath().toOSString()
                                    .startsWith("\\" + file.getProject().getName() + "\\jobs\\")) {
                                MessageBox messageBox = new MessageBox(new Shell(),SWT.ICON_ERROR | SWT.OK);
                                messageBox.setText("Error");
                                messageBox.setMessage("The Job File can be created only inside Jobs folder");
                                messageBox.open();

                            } else if (OSValidator.isMac() && !file.getFullPath().toOSString()
                                    .startsWith("/" + file.getProject().getName() + "/jobs/")) {
                                MessageBox messageBox = new MessageBox(new Shell(),SWT.ICON_ERROR | SWT.OK);
                                messageBox.setText("Error");
                                messageBox.setMessage("The Job File can be created only inside Jobs folder");
                                messageBox.open();

                            } else {
                                System.out.println(file.getName() + " file already exist");
                                JobNameChangeDialog dialog = new JobNameChangeDialog(
                                        new Shell(),file.getName());
                                int returnCode = dialog.open();
                                if (returnCode == 0 && !file.getName().equals(dialog.getJobName())) {
                                    String newFullPath = file.getLocation().toString().replace(file.getName(),"")
                                            + dialog.getJobName();
                                    File oldFile = new File(file.getLocation().toString());
                                    File newFile = new File(newFullPath);
                                    try {
                                        FileUtils.copyFile(oldFile,newFile);
                                    } catch (IOException e) {
                                        e.printStackTrace();
                                    }
                                }
                            }
                            try {
                                file.delete(true,null);
                            } catch (CoreException e) {
                                e.printStackTrace();
                            }
                        }
                    }

                }

            }
        });
        return true;// visit the children
    }

    public Integer traverseToCheckIfFileAlreadyExists(String path,String currentFileName,boolean fileAlreadyExists) {

        if (!fileAlreadyExists) {
            File rootFolder = new File(path);
            File[] listOfAvailableFiles = rootFolder.listFiles();
            if (listOfAvailableFiles != null) {
                for (File file : listOfAvailableFiles) {
                    if (file.getName().equals(currentFileName)) {
                        fileCount = fileCount + 1;
                    } else if (!fileAlreadyExists && file.isDirectory()) {
                        traverseToCheckIfFileAlreadyExists(file.getAbsolutePath(),currentFileName,fileAlreadyExists);
                    }
                }
            }
        }
        return fileCount;
    }

}

要激活侦听器,我在主要方法中使用以下代码:

IResourceChangeListener listener = new ResourceChangeListener();
    ResourcesPlugin.getWorkspace().addResourceChangeListener(listener,IResourceChangeEvent.POST_BUILD
             | IResourceChangeEvent.PRE_BUILD);

如果文件已经存在,用于打开重命名选项的对话框类:

public class JobNameChangeDialog extends TitleAreaDialog {

    private Text txtJobName;
    private String jobName;
    private String existingJobName;

    public JobNameChangeDialog(Shell parentShell,String existingJobName) {
        super(parentShell);
        this.existingJobName = existingJobName;
    }

    @Override
    public void create() {
        super.create();
        setTitle("Name Conflict");
    }

    @Override
    protected Control createDialogArea(Composite parent) {
        Composite area = (Composite) super.createDialogArea(parent);
        Composite container = new Composite(area,SWT.NONE);
        container.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
        GridLayout layout = new GridLayout(2,false);
        container.setLayout(layout);
        createJobName(container);
        return area;
    }

    private void createJobName(Composite container) {
        Label lbtJobName = new Label(container,SWT.NONE);
        lbtJobName.setText("Enter a new name for " + "'" + existingJobName + "'" + ":");

        GridData dataJobName = new GridData();
        dataJobName.grabExcessHorizontalSpace = true;
        dataJobName.horizontalAlignment = GridData.FILL;

        txtJobName = new Text(container,SWT.BORDER);
        txtJobName.setText(existingJobName);
        txtJobName.setLayoutData(dataJobName);
    }

    @Override
    protected boolean isResizable() {
        return true;
    }

    private void saveInput() {
        jobName = txtJobName.getText();
    }

    @Override
    protected void okPressed() {
        saveInput();
        if (jobName.equals(existingJobName)) {
            setErrorMessage("Job with this name already exists");
        } else {
            super.okPressed();
        }

    }

    public String getJobName() {
        return jobName;
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...