| /** | |
| * Quickly create projects according to styleguide. | |
| * | |
| * create a plug-in: | |
| * new Setup().createPlugin("org.eclipse.skills.myProject", "My Project") | |
| * | |
| * create a feature: | |
| * new Setup().createFeature("org.eclipse.skills.my.feature", "My Feature") | |
| * | |
| * add nature to all java projects: | |
| * new Setup().updateNature("nature.id") | |
| * | |
| * copy file to all java projects: | |
| * new Setup().copyTemplate("workspace://some.project/source.file", "/path/within/target/project/target.file") | |
| */ | |
| loadModule("/System/Resources"); | |
| function Setup() { | |
| this.replacements = {}; | |
| // project defaults | |
| this.addReplacement("${releng.name}", "Eclipse EASE"); | |
| this.addReplacement("${java.version}", "JavaSE-1.8"); | |
| this.addReplacement("${bundle.version}", "0.9.0"); | |
| this.addReplacement("${bundle.vendor}", "Eclipse.org"); | |
| this.addReplacement("${project.root.id}", "org.eclipse.ease"); | |
| this.addReplacement("${releng.project}", "org.eclipse.ease.releng"); | |
| this.addReplacement("${help.project}", "org.eclipse.ease.help"); | |
| } | |
| Setup.prototype.createFeature = function(featureId, featureName) { | |
| if (typeof (featureName) === 'undefined') | |
| featureName = featureId; | |
| this.log("Create feature: " + featureId + " ..."); | |
| this.addReplacement("${bundle.id}", featureId); | |
| this.addReplacement("${bundle.name}", featureName); | |
| var project = createProject(featureId); | |
| this.addNature(project, "org.eclipse.pde.FeatureNature"); | |
| this.createFiles(project, "workspace://${releng.project}/templates/feature"); | |
| this.log("\tdone!"); | |
| } | |
| Setup.prototype.createPlugin = function(pluginId, pluginName) { | |
| if (typeof (pluginName) === 'undefined') | |
| pluginName = pluginId; | |
| this.log("Create plug-in: " + pluginId + " ..."); | |
| // create plugin | |
| this.addReplacement("${bundle.id}", pluginId); | |
| this.addReplacement("${bundle.name}", pluginName); | |
| this.internalCreatePlugin(pluginId, pluginName, "workspace://${releng.project}/templates/plugin"); | |
| // add to master pom | |
| this.replaceInFile("workspace://${releng.location}/pom.xml", "<!-- plugin insertion point -->", "<module>../../plugins/${bundle.id}</module>\n\t\t<!-- plugin insertion point -->"); | |
| this.replaceInFile("workspace://${releng.location}.coverage/pom.xml", "<!-- plugin insertion point -->", "<dependency>\n\t\t\t<groupId>${project.root.id}</groupId>\n\t\t\t<artifactId>${bundle.name}</artifactId>\n\t\t\t<version>${bundle.version}-SNAPSHOT</version>\n\t\t\t<scope>compile</scope>\n\t\t</dependency>\n\t\t<!-- plugin insertion point -->"); | |
| this.appendToFile("workspace://${help.project}/build.properties", ",\\\n\t\t\t\t\t\tplatform:/plugin/${bundle.name}"); | |
| // create test fragment | |
| this.createTestFragment(pluginId, pluginName); | |
| } | |
| Setup.prototype.createTestFragment = function(pluginId, pluginName) { | |
| if (typeof (pluginName) === 'undefined') | |
| pluginName = pluginId; | |
| // create test fragment | |
| this.log("Create test plug-in: " + pluginId + ".test" + " ..."); | |
| pluginId += ".test"; | |
| pluginName += " Unit Tests"; | |
| this.addReplacement("${bundle.id}", pluginId); | |
| this.addReplacement("${bundle.name}", pluginName); | |
| this.addReplacement("${bundle.host.id}", pluginId); | |
| this.internalCreatePlugin(pluginId, pluginName, "workspace://${releng.project}/templates/plugin-test"); | |
| // add to master pom | |
| this.replaceInFile("workspace://${releng.project}/pom.xml", "<!-- test insertion point -->", "<module>../../tests/${bundle.id}</module>\n\t\t<!-- test insertion point -->"); | |
| this.replaceInFile("workspace://${releng.project}.coverage/pom.xml", "<!-- test insertion point -->", "<dependency>\n\t\t\t<groupId>${project.root.id}</groupId>\n\t\t\t<artifactId>${bundle.id}</artifactId>\n\t\t\t<version>${bundle.version}-SNAPSHOT</version>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\t\t<!-- test insertion point -->"); | |
| } | |
| Setup.prototype.internalCreatePlugin = function(pluginId, pluginName, templateFolder) { | |
| var project = createProject(pluginId); | |
| // to plugin project | |
| this.addNature(project, "org.eclipse.jdt.core.javanature"); | |
| this.addNature(project, "org.eclipse.pde.PluginNature"); | |
| createFolder("workspace://" + project.getName() + "/src"); | |
| // checkers | |
| this.addNature(project, "ch.acanda.eclipse.pmd.builder.PMDNature"); | |
| this.addNature(project, "edu.umd.cs.findbugs.plugin.eclipse.findbugsNature"); | |
| this.addNature(project, "net.sf.eclipsecs.core.CheckstyleNature"); | |
| this.createFiles(project, templateFolder); | |
| } | |
| Setup.prototype.createFiles = function(project, templateFolder) { | |
| var templateFolder = new java.lang.String(this.replaceText(templateFolder)); | |
| var prefix = templateFolder.substring(templateFolder.indexOf("://") + 3); | |
| var templates = findFiles("*", templateFolder, true); | |
| for (index in templates) { | |
| var sourceFile = templates[index]; | |
| var index = sourceFile.getFullPath().toString().indexOf(prefix); | |
| var targetFile = "workspace://" + project.getName() + sourceFile.getFullPath().toString().substring(index + prefix.length()); | |
| this.log("\tcreate " + targetFile) | |
| var content = readFile(sourceFile); | |
| var handle = writeFile(targetFile, this.replaceText(content)); | |
| closeFile(handle); | |
| } | |
| } | |
| Setup.prototype.addNature = function(project, natureId) { | |
| var description = project.getDescription(); | |
| if (!description.hasNature(natureId)) { | |
| this.log("\tadd nature " + natureId); | |
| var natures = description.getNatureIds(); | |
| var newNatures = java.util.Arrays.copyOf(natures, natures.length + 1); | |
| newNatures[natures.length] = natureId; | |
| description.setNatureIds(newNatures); | |
| project.setDescription(description, null); | |
| } | |
| } | |
| Setup.prototype.log = function(message) { | |
| print(message); | |
| } | |
| Setup.prototype.addReplacement = function(key, value) { | |
| this.replacements[key] = value; | |
| } | |
| Setup.prototype.replaceInFile = function(file, search, replacement) { | |
| var resolvedFile = this.replaceText(file) | |
| var content = readFile(resolvedFile); | |
| var handle = writeFile(resolvedFile, content.replace(search, this.replaceText(replacement))); | |
| closeFile(handle); | |
| } | |
| Setup.prototype.appendToFile = function(file, text) { | |
| var resolvedFile = this.replaceText(file) | |
| var content = readFile(resolvedFile); | |
| var handle = writeFile(resolvedFile, content + this.replaceText(text)); | |
| closeFile(handle); | |
| } | |
| Setup.prototype.replaceText = function(text) { | |
| var processed = new java.lang.String(text); | |
| for (key in this.replacements) | |
| processed = processed.replaceAll(java.util.regex.Pattern.quote(key), this.replacements[key]); | |
| return processed; | |
| } | |
| Setup.prototype.updateNature = function(natureId) { | |
| var projects = getWorkspace().getProjects(); | |
| for (var index = 0; index < projects.length; index++) { | |
| var project = projects[index]; | |
| if (this.isJavaProject(project)) | |
| this.addNature(project, natureId); | |
| } | |
| } | |
| Setup.prototype.copyTemplate = function(source, targetRelativeToProject) { | |
| var projects = getWorkspace().getProjects(); | |
| for (var index = 0; index < projects.length; index++) { | |
| var project = projects[index]; | |
| if (this.isJavaProject(project)) | |
| copyFile(source, "workspace://" + project.getName() + "/" + targetRelativeToProject); | |
| } | |
| } | |
| Setup.prototype.isJavaProject = function(project) { | |
| return (project.getDescription().hasNature("org.eclipse.jdt.core.javanature")); | |
| } | |
| 'create plugin: new Setup().createPlugin("org.eclipse.ease.myplugin", "plugin name")\n' + | |
| 'create test plugin: new Setup().createTestFragment("org.eclipse.ease.myplugin", "plugin name")' |