diff options
Diffstat (limited to 'extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/LocateCppProject.java')
-rw-r--r-- | extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/LocateCppProject.java | 50 |
1 files changed, 40 insertions, 10 deletions
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; } |