use of com.liferay.blade.api.AutoMigrateException in project liferay-ide by liferay.
the class ImportStatementMigrator method correctProblems.
@Override
public int correctProblems(File file, List<Problem> problems) throws AutoMigrateException {
int problemsFixed = 0;
List<String> importsToRewrite = new ArrayList<>();
for (Problem problem : problems) {
boolean problemFound = false;
if (problem.autoCorrectContext instanceof String) {
String importData = problem.autoCorrectContext;
if ((importData != null) && importData.startsWith(_PREFIX)) {
String importValue = importData.substring(_PREFIX.length());
if (_importFixes.containsKey(importValue)) {
importsToRewrite.add(problem.getLineNumber() + "," + importValue);
problemFound = true;
}
}
}
if (problemFound) {
problemsFixed++;
}
}
if (ListUtil.isNotEmpty(importsToRewrite)) {
try (InputStream inputStream = Files.newInputStream(file.toPath())) {
String[] lines = _readLines(inputStream);
String[] editedLines = new String[lines.length];
System.arraycopy(lines, 0, editedLines, 0, lines.length);
for (String importData : importsToRewrite) {
String[] importMap = importData.split(",");
int lineNumber = Integer.parseInt(importMap[0]);
String importName = importMap[1];
editedLines[lineNumber - 1] = editedLines[lineNumber - 1].replaceAll(importName, _importFixes.get(importName));
}
StringBuilder sb = new StringBuilder();
for (String editedLine : editedLines) {
sb.append(editedLine);
sb.append(System.getProperty("line.separator"));
}
FileWriter writer = new FileWriter(file);
writer.write(sb.toString());
writer.close();
_clearCache(file);
return problemsFixed;
} catch (IOException ioe) {
throw new AutoMigrateException("Unable to auto-correct", ioe);
}
}
return 0;
}
use of com.liferay.blade.api.AutoMigrateException in project liferay-ide by liferay.
the class AutoCorrectAction method runWithAutoCorrect.
public IStatus runWithAutoCorrect(final List<Problem> problems) {
final IResource file = MigrationUtil.getIResourceFromProblem(problems.get(0));
final BundleContext context = FrameworkUtil.getBundle(AutoCorrectAction.class).getBundleContext();
WorkspaceJob job = new WorkspaceJob("Auto correcting migration problem.") {
@Override
public IStatus runInWorkspace(IProgressMonitor monitor) {
IStatus retval = Status.OK_STATUS;
try {
final Problem problem = problems.get(0);
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, Collections.singletonList(problem));
if (problemsCorrected > 0) {
IResource resource = MigrationUtil.getIResourceFromProblem(problem);
if (resource != null) {
IMarker problemMarker = resource.findMarker(problem.markerId);
if ((problemMarker != null) && problemMarker.exists()) {
problemMarker.delete();
}
}
}
}
file.refreshLocal(IResource.DEPTH_ONE, monitor);
MigrateProjectHandler migrateHandler = new MigrateProjectHandler();
Path path = new Path(problem.getFile().getPath());
String projectName = "";
IProject project = CoreUtil.getProject(problem.getFile());
if (project.exists() && (project != null)) {
projectName = project.getName();
}
for (Problem p : problems) {
new MarkDoneAction().run(p, _provider);
}
if (!projectName.equals("")) {
migrateHandler.findMigrationProblems(new Path[] { path }, new String[] { projectName });
}
} catch (AutoMigrateException | CoreException | InvalidSyntaxException e) {
return retval = ProjectUI.createErrorStatus("Unable to auto correct problem", e);
}
return retval;
}
};
job.schedule();
return Status.OK_STATUS;
}
use of com.liferay.blade.api.AutoMigrateException 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.blade.api.AutoMigrateException in project liferay-ide by liferay.
the class JSPTagMigrator method correctProblems.
@Override
public int correctProblems(File file, List<Problem> problems) throws AutoMigrateException {
int corrected = 0;
List<Integer> autoCorrectTagOffsets = new ArrayList<>();
Stream<Problem> stream = problems.stream();
Class<? extends JSPTagMigrator> class1 = getClass();
String autoCorrectContext = "jsptag:" + class1.getName();
stream.filter(p -> p.autoCorrectContext.equals(autoCorrectContext)).map(p -> p.getStartOffset()).sorted();
for (Problem problem : problems) {
if ((problem.autoCorrectContext != null) && problem.autoCorrectContext.equals("jsptag:" + class1.getName())) {
autoCorrectTagOffsets.add(problem.getStartOffset());
}
}
Collections.sort(autoCorrectTagOffsets, new Comparator<Integer>() {
@Override
public int compare(Integer i1, Integer i2) {
return i2.compareTo(i1);
}
});
IFile jspFile = getJSPFile(file);
if (ListUtil.isNotEmpty(autoCorrectTagOffsets)) {
IDOMModel domModel = null;
try {
domModel = (IDOMModel) StructuredModelManager.getModelManager().getModelForEdit(jspFile);
List<IDOMElement> elementsToCorrect = new ArrayList<>();
for (int startOffset : autoCorrectTagOffsets) {
IndexedRegion region = domModel.getIndexedRegion(startOffset);
if (region instanceof IDOMElement) {
IDOMElement element = (IDOMElement) region;
elementsToCorrect.add(element);
}
}
for (IDOMElement element : elementsToCorrect) {
domModel.aboutToChangeModel();
if (_newAttrValues.length == 1) {
element.setAttribute(_attrNames[0], _newAttrValues[0]);
corrected++;
} else if (_newAttrNames.length == 1) {
String value = element.getAttribute(_attrNames[0]);
element.removeAttribute(_attrNames[0]);
element.setAttribute(_newAttrNames[0], value);
corrected++;
} else if (ListUtil.isNotEmpty(_newTagNames)) {
String tagName = element.getTagName();
NamedNodeMap attributes = element.getAttributes();
NodeList childNodes = element.getChildNodes();
String nodeValue = element.getNodeValue();
String newTagName = "";
for (int i = 0; i < _tagNames.length; i++) {
if (_tagNames[i].equals(tagName)) {
newTagName = _newTagNames[i];
break;
}
}
if (newTagName.equals("")) {
continue;
}
Element newNode = element.getOwnerDocument().createElement(newTagName);
if (nodeValue != null) {
newNode.setNodeValue(nodeValue);
}
for (int i = 0; i < attributes.getLength(); i++) {
Node attribute = attributes.item(i);
newNode.setAttribute(attribute.getNodeName(), attribute.getNodeValue());
}
for (int i = 0; i < childNodes.getLength(); i++) {
Node childNode = childNodes.item(i);
newNode.appendChild(childNode.cloneNode(true));
}
element.getParentNode().replaceChild(newNode, element);
corrected++;
}
domModel.changedModel();
domModel.save();
}
} catch (Exception e) {
throw new AutoMigrateException("Unable to auto-correct", e);
} finally {
if (domModel != null) {
domModel.releaseFromEdit();
}
}
IPath location = jspFile.getLocation();
if ((corrected > 0) && !location.toFile().equals(file)) {
try (InputStream jspFileContent = jspFile.getContents()) {
Files.copy(jspFileContent, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
} catch (Exception e) {
throw new AutoMigrateException("Error writing corrected file.", e);
}
}
}
return corrected;
}
use of com.liferay.blade.api.AutoMigrateException in project liferay-ide by liferay.
the class MVCPortletClassInPortletXML method correctProblems.
@Override
public int correctProblems(File file, List<Problem> problems) throws AutoMigrateException {
int corrected = 0;
IFile xmlFile = getXmlFile(file);
IDOMModel xmlModel = null;
if (xmlFile != null) {
try {
xmlModel = (IDOMModel) StructuredModelManager.getModelManager().getModelForEdit(xmlFile);
List<IDOMElement> elementsToCorrect = new ArrayList<>();
for (Problem problem : problems) {
if (_KEY.equals(problem.autoCorrectContext)) {
IndexedRegion region = xmlModel.getIndexedRegion(problem.startOffset);
if (region instanceof IDOMElement) {
IDOMElement element = (IDOMElement) region;
elementsToCorrect.add(element);
}
}
}
for (IDOMElement element : elementsToCorrect) {
xmlModel.aboutToChangeModel();
_removeChildren(element);
Text textContent = element.getOwnerDocument().createTextNode("com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet");
element.appendChild(textContent);
xmlModel.changedModel();
corrected++;
}
xmlModel.save();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (xmlModel != null) {
xmlModel.releaseFromEdit();
}
}
}
IPath location = xmlFile.getLocation();
if ((corrected > 0) && !location.toFile().equals(file)) {
try (InputStream xmlFileContent = xmlFile.getContents()) {
Files.copy(xmlFileContent, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
} catch (Exception e) {
throw new AutoMigrateException("Error writing corrected file.", e);
}
}
return corrected;
}
Aggregations