package blade.migrate.core;
import blade.migrate.api.FileMigrator;
import blade.migrate.api.Problem;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Dictionary;
import java.util.List;
import org.eclipse.core.runtime.Path;
import org.osgi.service.component.ComponentContext;
import org.osgi.service.component.annotations.Activate;
public abstract class JavaFileMigrator implements FileMigrator {
ComponentContext context;
String _problemTitle;
String _problemSummary;
String _problemTickets;
List<String> _fileExtentions;
String _sectionKey;
@Activate
public void activate(ComponentContext ctx) {
this.context = ctx;
final Dictionary<String, Object> properties = this.context.getProperties();
_fileExtentions = Arrays.asList(((String)properties.get("file.extensions")).split(","));
_problemTitle = (String)properties.get("problem.title");
_problemSummary = (String)properties.get("problem.summary");
_problemTickets = (String)properties.get("problem.tickets");
_sectionKey = (String)properties.get("problem.section");
}
@Override
public List<Problem> analyze(File file) {
final List<Problem> problems = new ArrayList<>();
final List<SearchResult> searchResults = searchJavaFile(file, createJavaFileChecker(file));
if (searchResults != null) {
String sectionHtml = MarkdownParser.getSection("BREAKING_CHANGES.markdown", _sectionKey);
for (SearchResult searchResult : searchResults) {
String fileExtension = new Path(file.getAbsolutePath()).getFileExtension();
problems.add(new Problem(_problemTitle, _problemSummary,
fileExtension, _problemTickets, file, searchResult.startLine,
searchResult.startOffset, searchResult.endOffset, sectionHtml,
searchResult.autoCorrectContext));
}
}
return problems;
}
protected JavaFileChecker createJavaFileChecker(File file) {
final String fileName = file.getName();
if (fileName.endsWith("java") && _fileExtentions.contains("java")) {
return new JavaFileChecker(file);
}
else if ((fileName.endsWith("jsp") && _fileExtentions.contains("jsp"))
|| (fileName.endsWith("jspf") && _fileExtentions.contains("jspf"))) {
return new JSPFileChecker(file);
}
return null;
}
protected abstract List<SearchResult> searchJavaFile(File file, JavaFileChecker javaFileChecker);
}