package blade.migrate.liferay70; import aQute.lib.io.IO; import blade.migrate.api.AutoMigrateException; import blade.migrate.api.AutoMigrator; import blade.migrate.api.FileMigrator; import blade.migrate.api.Problem; import blade.migrate.core.PropertiesFileChecker; import blade.migrate.core.PropertiesFileChecker.KeyInfo; import blade.migrate.core.SearchResult; import blade.migrate.core.WorkspaceHelper; import blade.migrate.core.WorkspaceUtil; import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.osgi.service.component.annotations.Component; @Component( property = { "file.extensions=properties", "problem.title=liferay-versions key in Liferay Plugin Packages Properties", "problem.summary=In order to deploy this project to 7.0 the liferay-versions property must be set to 7.0.0+", "problem.tickets=", "problem.section=", "auto.correct=property" }, service = { FileMigrator.class, AutoMigrator.class } ) public class LiferayVersionsProperties extends PropertiesFileMigrator implements AutoMigrator { private static final String PREFIX = "property:"; @Override protected void addPropertiesToSearch(List<String> _properties) { } @Override public List<Problem> analyze(File file) { final List<Problem> problems = new ArrayList<>(); if (file.getName().equals("liferay-plugin-package.properties")) { PropertiesFileChecker propertiesFileChecker = new PropertiesFileChecker(file); List<KeyInfo> keys = propertiesFileChecker.getInfos("liferay-versions"); if (keys != null && keys.size() > 0) { String versions = keys.get(0).value; if (!versions.matches(".*7\\.[0-9]\\.[0-9].*")) { List<SearchResult> results = propertiesFileChecker.findProperties("liferay-versions"); if (results != null) { String sectionHtml = _problemSummary; for (SearchResult searchResult : results) { searchResult.autoCorrectContext = PREFIX + "liferay-versions"; problems.add(new Problem( _problemTitle, _problemSummary, _problemType, _problemTickets, file, searchResult.startLine, searchResult.startOffset, searchResult.endOffset, sectionHtml, searchResult.autoCorrectContext)); } } } } } return problems; } @Override public void correctProblems(File file, List<Problem> problems) throws AutoMigrateException { try { String contents = new String(IO.read(file)); IFile propertiesFile = WorkspaceUtil.getFileFromWorkspace(file, new WorkspaceHelper()); for (Problem problem : problems) { if (problem.autoCorrectContext instanceof String) { final String propertyData = problem.autoCorrectContext; if (propertyData != null && propertyData.startsWith(PREFIX)) { final String propertyValue = propertyData.substring(PREFIX.length()); contents = contents.replaceAll(propertyValue+".*", propertyValue + "=7.0.0+"); } } } propertiesFile.setContents(new ByteArrayInputStream(contents.getBytes()), IResource.FORCE, null); } catch (CoreException | IOException e) { e.printStackTrace(); } } }