From 6b685bc30dc2ae3d369b50b3cdd8577d29e1f846 Mon Sep 17 00:00:00 2001 From: Adam Knapp Date: Mon, 3 May 2021 18:15:55 +0200 Subject: [PATCH 1/2] Implementing Eclipse project importer app &17 Signed-off-by: Adam Knapp --- org.eclipse.titan.designer/plugin.xml | 8 ++ .../designer/application/ImportProject.java | 79 ++++++++++++++ .../titan/designer/core/TITANNature.java | 27 +++++ .../designer/wizards/TITANProjectOpener.java | 101 ++++++++++++++++++ 4 files changed, 215 insertions(+) create mode 100644 org.eclipse.titan.designer/src/org/eclipse/titan/designer/application/ImportProject.java create mode 100644 org.eclipse.titan.designer/src/org/eclipse/titan/designer/wizards/TITANProjectOpener.java diff --git a/org.eclipse.titan.designer/plugin.xml b/org.eclipse.titan.designer/plugin.xml index 887646219..673a88011 100644 --- a/org.eclipse.titan.designer/plugin.xml +++ b/org.eclipse.titan.designer/plugin.xml @@ -1431,6 +1431,14 @@ + + + + + + Date: Tue, 4 May 2021 15:06:01 +0200 Subject: [PATCH 2/2] Adding JAR building feature to CLI-based building &17 Signed-off-by: Adam Knapp --- .../designer/application/InvokeBuild.java | 93 +++++++++++++++---- .../designer/core/ant/AntScriptGenerator.java | 7 +- 2 files changed, 82 insertions(+), 18 deletions(-) diff --git a/org.eclipse.titan.designer/src/org/eclipse/titan/designer/application/InvokeBuild.java b/org.eclipse.titan.designer/src/org/eclipse/titan/designer/application/InvokeBuild.java index 648b15d31..ac524604f 100644 --- a/org.eclipse.titan.designer/src/org/eclipse/titan/designer/application/InvokeBuild.java +++ b/org.eclipse.titan.designer/src/org/eclipse/titan/designer/application/InvokeBuild.java @@ -7,6 +7,9 @@ ******************************************************************************/ package org.eclipse.titan.designer.application; +import java.net.URI; + +import org.eclipse.core.filesystem.URIUtil; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IncrementalProjectBuilder; @@ -14,9 +17,19 @@ import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.QualifiedName; import org.eclipse.equinox.app.IApplication; import org.eclipse.equinox.app.IApplicationContext; import org.eclipse.titan.common.logging.ErrorReporter; +import org.eclipse.titan.common.path.PathUtil; +import org.eclipse.titan.common.path.TITANPathUtilities; +import org.eclipse.titan.common.utils.StringUtils; +import org.eclipse.titan.designer.core.TITANJavaBuilder; +import org.eclipse.titan.designer.core.ant.AntLaunchConfigGenerator; +import org.eclipse.titan.designer.core.ant.AntScriptGenerator; +import org.eclipse.titan.designer.core.ant.CliScriptGenerator; +import org.eclipse.titan.designer.properties.data.MakefileCreationData; +import org.eclipse.titan.designer.properties.data.ProjectBuildPropertyData; /** * Externally callable application, that takes exactly one argument: the name of the project it should build. @@ -25,44 +38,92 @@ import org.eclipse.titan.common.logging.ErrorReporter; * */ public final class InvokeBuild implements IApplication { + /** + * Turns on the automatic JAR export feature on the specified project + * @param project + */ + public void addJarBuilder(final IProject project, final String pathToJar) throws CoreException { + String temp = pathToJar; + final URI path = URIUtil.toURI(temp); + final URI resolvedPath = TITANPathUtilities.resolvePathURI(temp, project.getLocation().toOSString()); + if (path.equals(resolvedPath)) { + temp = PathUtil.getRelativePath(project.getLocation().toOSString(), temp); + } + project.setPersistentProperty(new QualifiedName(ProjectBuildPropertyData.QUALIFIER, + MakefileCreationData.TARGET_EXECUTABLE_PROPERTY), temp); + project.setPersistentProperty(new QualifiedName(ProjectBuildPropertyData.QUALIFIER, + MakefileCreationData.DEFAULT_JAVA_TARGET_PROPERTY), MakefileCreationData.DefaultJavaTarget.EXECUTABLE.toString()); + project.setPersistentProperty(new QualifiedName(ProjectBuildPropertyData.QUALIFIER, + MakefileCreationData.GENERATE_START_SH_SCRIPT_PROPERTY), String.valueOf(true)); + if (AntScriptGenerator.generateAndStoreBuildXML(project, true)) { + AntLaunchConfigGenerator.createAntLaunchConfiguration(project); + AntLaunchConfigGenerator.addAntBuilder(project); + project.refreshLocal(IResource.DEPTH_ONE, null); + } + CliScriptGenerator.generateAndStoreScripts(project); + AntLaunchConfigGenerator.setAntBuilderEnabled(project, true); + } + + private Integer closeWorkspace() { + try { + ResourcesPlugin.getWorkspace().save(true, null); + return EXIT_OK; + } catch (CoreException e) { + ErrorReporter.logExceptionStackTrace("Error while closing workspace", e); + return Integer.valueOf(-1); + } + } + @Override /** {@inheritDoc} */ public Object start(final IApplicationContext context) throws Exception { Platform.getBundle("org.eclipse.titan.designer").start(); - final String[] projectNames = (String[]) context.getArguments().get(IApplicationContext.APPLICATION_ARGS); + final String[] args = (String[]) context.getArguments().get(IApplicationContext.APPLICATION_ARGS); - if (projectNames.length != 1) { - System.out.println("This application takes as parameter the name of the project it should build."); - return Integer.valueOf(-1); + if (args.length % 2 != 1) { + System.out.println("This application takes as parameter the name of the project it should build.\n" + + "Optionally JAR output can be specified by the `-jar path_to_jar' option."); + return closeWorkspace(); } + String projectName = null, pathToJar = null; + for (int i = 0; i < args.length; ++i) { + if (args[i].equals("-jar") && i < args.length-1) { + pathToJar = args[++i]; + continue; + } + projectName = args[i]; + } + if (!PathUtil.isValidFilePath(pathToJar)) { + System.out.println("The path `" + pathToJar + "' is not valid."); + return closeWorkspace(); + } final IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); for (final IProject project : projects) { - if (project != null && project.getName().equals(projectNames[0])) { + if (project != null && project.getName().equals(projectName)) { try { project.refreshLocal(IResource.DEPTH_INFINITE, null); + if (!StringUtils.isNullOrEmpty(pathToJar) && TITANJavaBuilder.isBuilderEnabled(project)) { + addJarBuilder(project, pathToJar); + } + project.build(IncrementalProjectBuilder.FULL_BUILD, new NullProgressMonitor()); } catch (CoreException e) { ErrorReporter.logExceptionStackTrace(e); + } catch (Exception e) { + ErrorReporter.logExceptionStackTrace("Unknown error", e); } - project.build(IncrementalProjectBuilder.FULL_BUILD, new NullProgressMonitor()); - try { - ResourcesPlugin.getWorkspace().save(true, null); - } catch (CoreException e) { - ErrorReporter.logExceptionStackTrace("Error while closing workspace",e); - } - return EXIT_OK; + return closeWorkspace(); } } - - System.out.println("The project with name `" + projectNames[0] + "' could not be found."); - return Integer.valueOf(-1); + System.out.println("The project with name `" + projectName + "' could not be found."); + + return closeWorkspace(); } @Override /** {@inheritDoc} */ public void stop() { // nothing to be done - } } diff --git a/org.eclipse.titan.designer/src/org/eclipse/titan/designer/core/ant/AntScriptGenerator.java b/org.eclipse.titan.designer/src/org/eclipse/titan/designer/core/ant/AntScriptGenerator.java index ab0f265c8..31f988ed0 100644 --- a/org.eclipse.titan.designer/src/org/eclipse/titan/designer/core/ant/AntScriptGenerator.java +++ b/org.eclipse.titan.designer/src/org/eclipse/titan/designer/core/ant/AntScriptGenerator.java @@ -224,9 +224,12 @@ public final class AntScriptGenerator { return null; } final File jarFile = new File(jarPathString); - final String jarFolder = jarFile.getParent(); + String jarFolder = jarFile.getParent(); + if (StringUtils.isNullOrEmpty(jarFolder)) { + jarFolder = "."; + } final String jarFileName = jarFile.getName(); - if (StringUtils.isNullOrEmpty(jarFolder) || StringUtils.isNullOrEmpty(jarFileName)) { + if (StringUtils.isNullOrEmpty(jarFileName)) { ErrorReporter.INTERNAL_ERROR("Jar file is null or empty"); return null; } -- GitLab