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();
}
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;
}
}
}
}
});
}
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();
}
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);
}
}
}
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) {
}
}
Aggregations