Search in sources :

Example 1 with FileProblems

use of com.liferay.ide.project.core.upgrade.FileProblems in project liferay-ide by liferay.

the class MigrateProjectHandler method findMigrationProblems.

public void findMigrationProblems(final IPath[] locations, final String[] projectName) {
    Job job = new WorkspaceJob("Finding migration problems...") {

        @Override
        public IStatus runInWorkspace(final IProgressMonitor monitor) throws CoreException {
            IStatus retval = Status.OK_STATUS;
            final BundleContext context = FrameworkUtil.getBundle(getClass()).getBundleContext();
            ProgressMonitor override = new ProgressMonitor() {

                @Override
                public void beginTask(String taskName, int totalWork) {
                    monitor.beginTask(taskName, totalWork);
                }

                @Override
                public void done() {
                    monitor.done();
                }

                @Override
                public boolean isCanceled() {
                    return monitor.isCanceled();
                }

                @Override
                public void setTaskName(String taskName) {
                    monitor.setTaskName(taskName);
                }

                @Override
                public void worked(int work) {
                    monitor.worked(work);
                }
            };
            try {
                final ServiceReference<Migration> sr = context.getServiceReference(Migration.class);
                final Migration m = context.getService(sr);
                List<Problem> allProblems = null;
                boolean singleFile = false;
                if ((locations.length == 1) && locations[0].toFile().exists() && locations[0].toFile().isFile()) {
                    singleFile = true;
                }
                MigrationProblemsContainer container = null;
                if (_combineExistedProblem == true) {
                    container = UpgradeAssistantSettingsUtil.getObjectFromStore(MigrationProblemsContainer.class);
                }
                List<MigrationProblems> migrationProblemsList = new ArrayList<>();
                if (container == null) {
                    container = new MigrationProblemsContainer();
                }
                if (container.getProblemsArray() != null) {
                    List<MigrationProblems> mpList = Arrays.asList(container.getProblemsArray());
                    for (MigrationProblems mp : mpList) {
                        migrationProblemsList.add(mp);
                    }
                }
                for (int j = 0; j < locations.length; j++) {
                    allProblems = new ArrayList<>();
                    if (!override.isCanceled() && _shouldSearch(locations[j].toFile())) {
                        List<Problem> problems = null;
                        if (singleFile) {
                            _clearFileMarkers(locations[j].toFile());
                            Set<File> files = new HashSet<>();
                            files.add(locations[j].toFile());
                            problems = m.findProblems(files, override);
                        } else {
                            problems = m.findProblems(locations[j].toFile(), override);
                        }
                        for (Problem problem : problems) {
                            if (_shouldAdd(problem)) {
                                allProblems.add(problem);
                            }
                        }
                    }
                    if (ListUtil.isNotEmpty(allProblems)) {
                        _addMarkers(allProblems);
                        MigrationProblems migrationProblems = new MigrationProblems();
                        FileProblems[] fileProblems = FileProblemsUtil.newFileProblemsListFrom(allProblems.toArray(new Problem[0]));
                        migrationProblems.setProblems(fileProblems);
                        migrationProblems.setType("Code Problems");
                        migrationProblems.setSuffix(projectName[j]);
                        int index = _isAlreadyExist(migrationProblemsList, projectName, j);
                        if (index != -1) {
                            if (singleFile) {
                                UpgradeProblems up = migrationProblemsList.get(index);
                                FileProblems[] problems = up.getProblems();
                                for (int n = 0; n < problems.length; n++) {
                                    FileProblems fp = problems[n];
                                    String problemFilePath = fp.getFile().getPath();
                                    String initProblemFilePath = locations[0].toFile().getPath();
                                    if (problemFilePath.equals(initProblemFilePath)) {
                                        problems[n] = fileProblems[0];
                                        break;
                                    }
                                }
                                migrationProblems.setProblems(problems);
                            }
                            migrationProblemsList.set(index, migrationProblems);
                        } else {
                            migrationProblemsList.add(migrationProblems);
                        }
                    } else {
                        int index = _isAlreadyExist(migrationProblemsList, projectName, j);
                        if (index != -1) {
                            if (singleFile) {
                                MigrationProblems mp = migrationProblemsList.get(index);
                                FileProblems[] fps = mp.getProblems();
                                List<FileProblems> fpList = Arrays.asList(fps);
                                List<FileProblems> newFPList = new ArrayList<>();
                                for (FileProblems fp : fpList) {
                                    String problemFilePath = fp.getFile().getPath();
                                    String initProblemFilePath = locations[0].toFile().getPath();
                                    if (!problemFilePath.equals(initProblemFilePath)) {
                                        newFPList.add(fp);
                                    }
                                }
                                mp.setProblems(newFPList.toArray(new FileProblems[0]));
                                migrationProblemsList.set(index, mp);
                            } else {
                                migrationProblemsList.remove(index);
                            }
                        }
                    }
                }
                if (ListUtil.isNotEmpty(migrationProblemsList)) {
                    container.setProblemsArray(migrationProblemsList.toArray(new MigrationProblems[0]));
                    UpgradeAssistantSettingsUtil.setObjectToStore(MigrationProblemsContainer.class, container);
                } else {
                    UpgradeAssistantSettingsUtil.setObjectToStore(MigrationProblemsContainer.class, null);
                }
                if (singleFile) {
                    refreshViewer(allProblems);
                } else {
                    allProblems.add(new Problem());
                    m.reportProblems(allProblems, Migration.DETAIL_LONG, "ide");
                }
            } catch (Exception e) {
                retval = ProjectUI.createErrorStatus("Error in migrate command", e);
            }
            return retval;
        }
    };
    try {
        ProjectUI.getProgressService().showInDialog(Display.getDefault().getActiveShell(), job);
    } catch (Exception e) {
    }
    job.schedule();
}
Also used : IStatus(org.eclipse.core.runtime.IStatus) Migration(com.liferay.blade.api.Migration) ArrayList(java.util.ArrayList) MigrationProblems(com.liferay.ide.project.core.upgrade.MigrationProblems) MigrationProblemsContainer(com.liferay.ide.project.core.upgrade.MigrationProblemsContainer) WorkspaceJob(org.eclipse.core.resources.WorkspaceJob) Job(org.eclipse.core.runtime.jobs.Job) HashSet(java.util.HashSet) UpgradeProblems(com.liferay.ide.project.core.upgrade.UpgradeProblems) WorkspaceJob(org.eclipse.core.resources.WorkspaceJob) CoreException(org.eclipse.core.runtime.CoreException) ExecutionException(org.eclipse.core.commands.ExecutionException) ProgressMonitor(com.liferay.blade.api.ProgressMonitor) IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) FileProblems(com.liferay.ide.project.core.upgrade.FileProblems) Problem(com.liferay.blade.api.Problem) IFile(org.eclipse.core.resources.IFile) File(java.io.File) BundleContext(org.osgi.framework.BundleContext)

Example 2 with FileProblems

use of com.liferay.ide.project.core.upgrade.FileProblems in project liferay-ide by liferay.

the class MigrateProjectHandler method refreshViewer.

protected void refreshViewer(List<Problem> allProblems) {
    FindBreakingChangesPage page = UpgradeView.getPage(Page.findbreackingchangesPageId, FindBreakingChangesPage.class);
    TableViewer problemsViewer = page.get_problemsViewer();
    TreeViewer treeViewer = page.getTreeViewer();
    UIUtil.async(new Runnable() {

        @Override
        public void run() {
            problemsViewer.setInput(allProblems);
            Object currentTreeNode = treeViewer.getStructuredSelection().getFirstElement();
            String currentPath = null;
            if (currentTreeNode instanceof FileProblems) {
                FileProblems currentNode = (FileProblems) currentTreeNode;
                File currentFile = currentNode.getFile();
                currentPath = currentFile.getAbsolutePath();
            }
            MigrationContentProvider contentProvider = (MigrationContentProvider) treeViewer.getContentProvider();
            MigrationProblemsContainer mc = (MigrationProblemsContainer) contentProvider.getProblems().get(0);
            for (MigrationProblems project : mc.getProblemsArray()) {
                Iterator<FileProblems> fileProblemItertor = new LinkedList<>(Arrays.asList(project.getProblems())).iterator();
                while (fileProblemItertor.hasNext()) {
                    FileProblems fileProblem = fileProblemItertor.next();
                    File file = fileProblem.getFile();
                    String fileAbsolutePath = file.getAbsolutePath();
                    if (fileAbsolutePath.equals(currentPath)) {
                        List<Problem> problems = fileProblem.getProblems();
                        problems.clear();
                        problems.addAll(allProblems);
                        break;
                    }
                }
            }
        }
    });
}
Also used : TreeViewer(org.eclipse.jface.viewers.TreeViewer) FindBreakingChangesPage(com.liferay.ide.project.ui.upgrade.animated.FindBreakingChangesPage) MigrationProblems(com.liferay.ide.project.core.upgrade.MigrationProblems) MigrationProblemsContainer(com.liferay.ide.project.core.upgrade.MigrationProblemsContainer) LinkedList(java.util.LinkedList) FileProblems(com.liferay.ide.project.core.upgrade.FileProblems) Iterator(java.util.Iterator) List(java.util.List) ArrayList(java.util.ArrayList) LinkedList(java.util.LinkedList) TableViewer(org.eclipse.jface.viewers.TableViewer) IFile(org.eclipse.core.resources.IFile) File(java.io.File)

Example 3 with FileProblems

use of com.liferay.ide.project.core.upgrade.FileProblems in project liferay-ide by liferay.

the class AutoCorrectAllAction method run.

public void run() {
    final BundleContext context = FrameworkUtil.getBundle(AutoCorrectAction.class).getBundleContext();
    WorkspaceJob job = new WorkspaceJob("Auto correcting all of migration problem.") {

        @Override
        public IStatus runInWorkspace(IProgressMonitor monitor) {
            IStatus retval = Status.OK_STATUS;
            try {
                if ((_problemsContainerList != null) && (_problemsContainerList.size() > 0)) {
                    for (ProblemsContainer problemsContainer : _problemsContainerList) {
                        for (UpgradeProblems upgradeProblems : problemsContainer.getProblemsArray()) {
                            FileProblems[] fileProblemsArray = upgradeProblems.getProblems();
                            for (FileProblems fileProblems : fileProblemsArray) {
                                List<Problem> problems = fileProblems.getProblems();
                                Set<String> fixed = new HashSet<>();
                                for (Problem problem : problems) {
                                    if (problem.getStatus() == Problem.STATUS_IGNORE) {
                                        continue;
                                    }
                                    final IResource file = MigrationUtil.getIResourceFromProblem(problem);
                                    if (FileUtil.notExists(file)) {
                                        continue;
                                    }
                                    String fixedKey = file.getLocation().toString() + "," + problem.autoCorrectContext;
                                    if ((problem.autoCorrectContext == null) || fixed.contains(fixedKey)) {
                                        continue;
                                    }
                                    String autoCorrectKey = null;
                                    final int filterKeyIndex = problem.autoCorrectContext.indexOf(":");
                                    if (filterKeyIndex > -1) {
                                        autoCorrectKey = problem.autoCorrectContext.substring(0, filterKeyIndex);
                                    } else {
                                        autoCorrectKey = problem.autoCorrectContext;
                                    }
                                    final Collection<ServiceReference<AutoMigrator>> refs = context.getServiceReferences(AutoMigrator.class, "(auto.correct=" + autoCorrectKey + ")");
                                    for (ServiceReference<AutoMigrator> ref : refs) {
                                        final AutoMigrator autoMigrator = context.getService(ref);
                                        int problemsCorrected = autoMigrator.correctProblems(problem.file, problems);
                                        fixed.add(fixedKey);
                                        if ((problemsCorrected > 0) && (file != null)) {
                                            IMarker problemMarker = file.findMarker(problem.markerId);
                                            if ((problemMarker != null) && problemMarker.exists()) {
                                                problemMarker.delete();
                                            }
                                        }
                                    }
                                    file.refreshLocal(IResource.DEPTH_ONE, monitor);
                                }
                            }
                        }
                    }
                }
                UIUtil.sync(new Runnable() {

                    @Override
                    public void run() {
                        IViewPart view = UIUtil.findView(UpgradeView.ID);
                        try {
                            BreakingChangeSelectedProject selectedProject = UpgradeAssistantSettingsUtil.getObjectFromStore(BreakingChangeSelectedProject.class);
                            StructuredSelection projectSelection = null;
                            List<IProject> projects = new ArrayList<>();
                            if (selectedProject != null) {
                                List<BreakingChangeSimpleProject> selectedProjects = selectedProject.getSelectedProjects();
                                selectedProjects.stream().forEach(breakingProject -> projects.add(CoreUtil.getProject(breakingProject.getName())));
                                projectSelection = new StructuredSelection(projects.toArray(new IProject[0]));
                            }
                            new RunMigrationToolAction("Run Migration Tool", view.getViewSite().getShell(), projectSelection).run();
                        } catch (IOException ioe) {
                            ProjectUI.logError(ioe);
                        }
                    }
                });
            } catch (AutoMigrateException | CoreException | InvalidSyntaxException e) {
                return retval = ProjectUI.createErrorStatus("Unable to auto correct problem", e);
            }
            return retval;
        }
    };
    job.schedule();
}
Also used : CoreUtil(com.liferay.ide.core.util.CoreUtil) CoreException(org.eclipse.core.runtime.CoreException) StructuredSelection(org.eclipse.jface.viewers.StructuredSelection) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) IStatus(org.eclipse.core.runtime.IStatus) UpgradeAssistantSettingsUtil(com.liferay.ide.project.core.upgrade.UpgradeAssistantSettingsUtil) IProject(org.eclipse.core.resources.IProject) IViewPart(org.eclipse.ui.IViewPart) IMarker(org.eclipse.core.resources.IMarker) ServiceReference(org.osgi.framework.ServiceReference) InvalidSyntaxException(org.osgi.framework.InvalidSyntaxException) FileUtil(com.liferay.ide.core.util.FileUtil) UpgradeProblems(com.liferay.ide.project.core.upgrade.UpgradeProblems) Collection(java.util.Collection) Set(java.util.Set) Status(org.eclipse.core.runtime.Status) IOException(java.io.IOException) Action(org.eclipse.jface.action.Action) ProjectUI(com.liferay.ide.project.ui.ProjectUI) BundleContext(org.osgi.framework.BundleContext) IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) AutoMigrateException(com.liferay.blade.api.AutoMigrateException) WorkspaceJob(org.eclipse.core.resources.WorkspaceJob) Problem(com.liferay.blade.api.Problem) BreakingChangeSimpleProject(com.liferay.ide.project.core.upgrade.BreakingChangeSimpleProject) List(java.util.List) AutoMigrator(com.liferay.blade.api.AutoMigrator) UIUtil(com.liferay.ide.ui.util.UIUtil) IResource(org.eclipse.core.resources.IResource) BreakingChangeSelectedProject(com.liferay.ide.project.core.upgrade.BreakingChangeSelectedProject) FileProblems(com.liferay.ide.project.core.upgrade.FileProblems) UpgradeView(com.liferay.ide.project.ui.upgrade.animated.UpgradeView) ProblemsContainer(com.liferay.ide.project.core.upgrade.ProblemsContainer) FrameworkUtil(org.osgi.framework.FrameworkUtil) IStatus(org.eclipse.core.runtime.IStatus) IViewPart(org.eclipse.ui.IViewPart) AutoMigrateException(com.liferay.blade.api.AutoMigrateException) StructuredSelection(org.eclipse.jface.viewers.StructuredSelection) ProblemsContainer(com.liferay.ide.project.core.upgrade.ProblemsContainer) ArrayList(java.util.ArrayList) List(java.util.List) InvalidSyntaxException(org.osgi.framework.InvalidSyntaxException) BreakingChangeSelectedProject(com.liferay.ide.project.core.upgrade.BreakingChangeSelectedProject) HashSet(java.util.HashSet) UpgradeProblems(com.liferay.ide.project.core.upgrade.UpgradeProblems) WorkspaceJob(org.eclipse.core.resources.WorkspaceJob) IOException(java.io.IOException) IProject(org.eclipse.core.resources.IProject) ServiceReference(org.osgi.framework.ServiceReference) IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) FileProblems(com.liferay.ide.project.core.upgrade.FileProblems) CoreException(org.eclipse.core.runtime.CoreException) AutoMigrator(com.liferay.blade.api.AutoMigrator) Problem(com.liferay.blade.api.Problem) IMarker(org.eclipse.core.resources.IMarker) IResource(org.eclipse.core.resources.IResource) BundleContext(org.osgi.framework.BundleContext)

Example 4 with FileProblems

use of com.liferay.ide.project.core.upgrade.FileProblems in project liferay-ide by liferay.

the class FindBreakingChangesPage method doubleClick.

@Override
public void doubleClick(DoubleClickEvent event) {
    if (event.getSelection() instanceof IStructuredSelection) {
        final IStructuredSelection ss = (IStructuredSelection) event.getSelection();
        Object element = ss.getFirstElement();
        if (element instanceof Problem) {
            MigrationUtil.openEditor((Problem) element);
        } else if (element instanceof FileProblems) {
            MigrationUtil.openEditor((FileProblems) element);
        }
    }
}
Also used : FileProblems(com.liferay.ide.project.core.upgrade.FileProblems) Problem(com.liferay.blade.api.Problem) IStructuredSelection(org.eclipse.jface.viewers.IStructuredSelection)

Example 5 with FileProblems

use of com.liferay.ide.project.core.upgrade.FileProblems in project liferay-ide by liferay.

the class MigrationUtil method updateMigrationProblemToStore.

public static void updateMigrationProblemToStore(Problem problem) {
    File file = problem.getFile();
    try {
        MigrationProblemsContainer container = UpgradeAssistantSettingsUtil.getObjectFromStore(MigrationProblemsContainer.class);
        boolean found = false;
        for (MigrationProblems mp : container.getProblemsArray()) {
            for (FileProblems fileProblem : mp.getProblems()) {
                if (fileProblem.getFile().equals(file)) {
                    for (int i = 0; i < fileProblem.getProblems().size(); i++) {
                        Problem p = fileProblem.getProblems().get(i);
                        if (p.equals(problem)) {
                            fileProblem.getProblems().set(i, problem);
                            found = true;
                            break;
                        }
                    }
                }
                if (found) {
                    break;
                }
            }
            if (found) {
                break;
            }
        }
        UpgradeAssistantSettingsUtil.setObjectToStore(MigrationProblemsContainer.class, container);
    } catch (IOException ioe) {
    }
}
Also used : FileProblems(com.liferay.ide.project.core.upgrade.FileProblems) Problem(com.liferay.blade.api.Problem) IOException(java.io.IOException) MigrationProblems(com.liferay.ide.project.core.upgrade.MigrationProblems) IFile(org.eclipse.core.resources.IFile) File(java.io.File) MigrationProblemsContainer(com.liferay.ide.project.core.upgrade.MigrationProblemsContainer)

Aggregations

FileProblems (com.liferay.ide.project.core.upgrade.FileProblems)10 Problem (com.liferay.blade.api.Problem)9 MigrationProblems (com.liferay.ide.project.core.upgrade.MigrationProblems)7 MigrationProblemsContainer (com.liferay.ide.project.core.upgrade.MigrationProblemsContainer)7 ArrayList (java.util.ArrayList)6 HashSet (java.util.HashSet)4 Iterator (java.util.Iterator)4 UpgradeProblems (com.liferay.ide.project.core.upgrade.UpgradeProblems)3 File (java.io.File)3 IOException (java.io.IOException)3 List (java.util.List)3 IFile (org.eclipse.core.resources.IFile)3 WorkspaceJob (org.eclipse.core.resources.WorkspaceJob)3 IProgressMonitor (org.eclipse.core.runtime.IProgressMonitor)3 IStatus (org.eclipse.core.runtime.IStatus)3 ProblemsContainer (com.liferay.ide.project.core.upgrade.ProblemsContainer)2 FindBreakingChangesPage (com.liferay.ide.project.ui.upgrade.animated.FindBreakingChangesPage)2 CoreException (org.eclipse.core.runtime.CoreException)2 IStructuredSelection (org.eclipse.jface.viewers.IStructuredSelection)2 BundleContext (org.osgi.framework.BundleContext)2