Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnsgar Radermacher2014-05-07 07:56:43 +0000
committerAnsgar Radermacher2014-05-07 09:26:33 +0000
commit42e4f56af102f9442b5a40f23257b37633b95b1a (patch)
tree9959a429ac8c69dbc84fa225e2dbc1630a6e9291 /extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus
parent163e2c7030ea08bc3712f889ac38c8f667431f2f (diff)
downloadorg.eclipse.papyrus-42e4f56af102f9442b5a40f23257b37633b95b1a.tar.gz
org.eclipse.papyrus-42e4f56af102f9442b5a40f23257b37633b95b1a.tar.xz
org.eclipse.papyrus-42e4f56af102f9442b5a40f23257b37633b95b1a.zip
434286 - [C++ codegen] Generate into separate project instead of current project
Diffstat (limited to 'extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus')
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/preferences/CppCodeGenConstants.java5
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/preferences/CppCodeGenPreferenceInitializer.java1
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/LocateCppProject.java50
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/Messages.java6
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/messages.properties6
5 files changed, 54 insertions, 14 deletions
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/preferences/CppCodeGenConstants.java b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/preferences/CppCodeGenConstants.java
index 6da7ce34190..d67a305a2a8 100644
--- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/preferences/CppCodeGenConstants.java
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/preferences/CppCodeGenConstants.java
@@ -32,5 +32,10 @@ public class CppCodeGenConstants {
* User defined comment header in generated files
*/
public static final String P_COMMENT_HEADER = "commentHeader"; //$NON-NLS-1$
+
+ /**
+ * Suffix for generated header files
+ */
+ public static final String P_PROJECT_PREFIX = "projectPrefix"; //$NON-NLS-1$
}
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/preferences/CppCodeGenPreferenceInitializer.java b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/preferences/CppCodeGenPreferenceInitializer.java
index 86a582619b5..0cb5cff263c 100644
--- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/preferences/CppCodeGenPreferenceInitializer.java
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/preferences/CppCodeGenPreferenceInitializer.java
@@ -28,6 +28,7 @@ public class CppCodeGenPreferenceInitializer extends AbstractPreferenceInitializ
store.setDefault(CppCodeGenConstants.P_HEADER_SUFFIX, "h"); //$NON-NLS-1$
store.setDefault(CppCodeGenConstants.P_IMPLEM_SUFFIX, "cpp"); //$NON-NLS-1$
store.setDefault(CppCodeGenConstants.P_OUT_INOUT_OP, "*"); //$NON-NLS-1$
+ store.setDefault(CppCodeGenConstants.P_PROJECT_PREFIX, "org.eclipse.papyrus.cppgen."); //$NON-NLS-1$
// Default value for P_COMMENT_HEADER
String NL = System.getProperties().getProperty("line.separator"); //$NON-NLS-1$
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/LocateCppProject.java b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/LocateCppProject.java
index 2bcb3f1856a..570ba6a0727 100644
--- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/LocateCppProject.java
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/LocateCppProject.java
@@ -16,13 +16,20 @@ import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
-import org.eclipse.emf.common.util.URI;
import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.papyrus.codegen.extensionpoints.ILangSupport;
+import org.eclipse.papyrus.codegen.extensionpoints.LanguageSupport;
import org.eclipse.papyrus.cpp.codegen.Activator;
+import org.eclipse.papyrus.cpp.codegen.preferences.CppCodeGenConstants;
+import org.eclipse.papyrus.uml.tools.utils.PackageUtil;
import org.eclipse.swt.widgets.Shell;
+import org.eclipse.uml2.uml.Package;
import org.eclipse.uml2.uml.PackageableElement;
public class LocateCppProject {
+ public static final String LANGUAGE_NAME = "C++"; //$NON-NLS-1$
+
/**
* Locate and return the target project for the given packageable element. Return null if
* no target project can be found.
@@ -35,22 +42,45 @@ public class LocateCppProject {
* @return the associated project, if the C++ nature is applied.
*/
public static IProject getTargetProject(PackageableElement pe, boolean interactive) {
- URI uri = pe.eResource().getURI();
-
+ // URI uri = pe.eResource().getURI();
+ Package rootPkg = PackageUtil.getRootPackage(pe);
+
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
- if(uri.segmentCount() < 2)
- return null;
-
- IProject modelProject = root.getProject(uri.segment(1));
- if(!modelProject.exists())
+ /*
+ if(uri.segmentCount() < 2) {
return null;
+ }
+ */
+
+ IPreferenceStore store = Activator.getDefault().getPreferenceStore();
+ String prefix = store != null ? store.getString(CppCodeGenConstants.P_PROJECT_PREFIX) : "bad preferences."; //$NON-NLS-1$
+ String projectName = prefix + rootPkg.getName();
+ IProject modelProject = root.getProject(projectName);
+ if(!modelProject.exists()) {
+ boolean create = interactive && MessageDialog.openQuestion(new Shell(),
+ Messages.LocateCppProject_CreateTargetProjectTitle,
+ String.format(Messages.LocateCppProject_CreateTargetProjectDesc, projectName));
+ if (create) {
+ ILangSupport langSupport = LanguageSupport.getLangSupport(LANGUAGE_NAME);
+ if (langSupport != null) {
+ langSupport.resetConfigurationData();
+ modelProject = langSupport.createProject(projectName, null);
+ }
+ else {
+ return null;
+ }
+ }
+ else {
+ return null;
+ }
+ }
// Make sure the target project has the C and C++ build natures.
try {
if(!modelProject.hasNature(CCProjectNature.CC_NATURE_ID)) {
boolean apply = interactive && MessageDialog.openQuestion(new Shell(),
- Messages.LocateCppProject_0,
- Messages.LocateCppProject_1);
+ Messages.LocateCppProject_ApplyCNatureTitle,
+ Messages.LocateCppProject_ApplyCNatureDesc);
if (!apply) {
return null;
}
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/Messages.java b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/Messages.java
index b353472df03..aa1c639f0c9 100644
--- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/Messages.java
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/Messages.java
@@ -4,8 +4,10 @@ import org.eclipse.osgi.util.NLS;
public class Messages extends NLS {
private static final String BUNDLE_NAME = "org.eclipse.papyrus.cpp.codegen.utils.messages"; //$NON-NLS-1$
- public static String LocateCppProject_0;
- public static String LocateCppProject_1;
+ public static String LocateCppProject_ApplyCNatureTitle;
+ public static String LocateCppProject_ApplyCNatureDesc;
+ public static String LocateCppProject_CreateTargetProjectTitle;
+ public static String LocateCppProject_CreateTargetProjectDesc;
static {
// initialize resource bundle
NLS.initializeMessages(BUNDLE_NAME, Messages.class);
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/messages.properties b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/messages.properties
index d1d2a0f42a9..617270b5e1e 100644
--- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/messages.properties
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/messages.properties
@@ -1,2 +1,4 @@
-LocateCppProject_0=Need to apply C++ nature
-LocateCppProject_1=Code generation requires that the underlying project has a C++ nature. Do you want to apply this nature?
+LocateCppProject_ApplyCNatureTitle=Need to apply C++ nature
+LocateCppProject_ApplyCNatureDesc=Code generation requires that the underlying project has a C++ nature. Do you want to apply this nature?
+LocateCppProject_CreateTargetProjectDesc=Code generation needs to create a CDT project called "%s". Do you want to do this?
+LocateCppProject_CreateTargetProjectTitle=Target project does not exist

Back to the top