Used project management

com.nomagic.magicdraw.core.project.ProjectsManager provides the used project management (project usage, export, import, reload, and package sharing) methods.

Example #1. Exporting a used local project

The collection of project packages can be exported as a used project.

ProjectsManager projectsManager = Application.getInstance().getProjectsManager();
File file = new File(moduleFilePath);
ProjectDescriptor projectDescriptor = ProjectDescriptorsFactory.createProjectDescriptor(file.toURI());
// Export a collection of packages as a used project
projectsManager.exportModule(project, packages, "My used local project", projectDescriptor);

Example #2. Exporting a used server project

The com.nomagic.magicdraw.teamwork.application.TeamworkUtils class is used to export a used server project.

TeamworkUtils.exportTeamworkModule(project, packages, "My used remote project", remoteProjectQualifiedName);

Example #3. Using a project

The local and server project usage is similar - an appropriate project descriptor must be used, but module directories project option should be updated before using local project:

ProjectsManager projectsManager = Application.getInstance().getProjectsManager();
File file = new File(moduleFilePath);
// update project options only when using local project
String moduleDir = file.getParent();
ProjectOptions projectOptions = project.getOptions();
List<String> directories = projectOptions.getModulesDirectories(true);
if (!directories.contains(moduleDir))
{
projectOptions.addModuleDirectory(moduleDir);
}
ProjectDescriptor projectDescriptor = ProjectDescriptorsFactory.createProjectDescriptor(file.toURI());
// Use a project
projectsManager.useModule(project, projectDescriptor);

Example #4. Importing a used project

The local and server project import does not differ. Just an appropriate project descriptor must be used:

ProjectsManager projectsManager = Application.getInstance().getProjectsManager();
File file = new File(moduleFilePath);
ProjectDescriptor projectDescriptor = ProjectDescriptorsFactory.createProjectDescriptor(file.toURI());
projectsManager.importModule(project, projectDescriptor);

Example #5. Reloading a used project

The local and server project reload does not differ. Just an appropriate project descriptor must be used:

ProjectsManager projectsManager = Application.getInstance().getProjectsManager();
File file = new File(moduleFilePath);
ProjectDescriptor projectDescriptor = ProjectDescriptorsFactory.createProjectDescriptor(file.toURI());
projectsManager.reloadModule(project, projectDescriptor);

Example #6. The package sharing

ProjectsManager projectsManager = Application.getInstance().getProjectsManager();
SessionManager.getInstance().createSession("Create shared package");
// Create a package to share
Package aPackage = project.getElementsFactory().createPackageInstance();
aPackage.setOwner(project.getModel());
aPackage.setName("myShare");
SessionManager.getInstance().closeSession();
// Share a package
projectsManager.sharePackage(project, Arrays.asList(aPackage), "my used project");
 
 
// Save a project
ProjectDescriptor projectDescriptor = ProjectDescriptorsFactory.getDescriptorForProject(project);
projectsManager.saveProject(projectDescriptor, true);

Example #7. Editing a used project within the project

final String moduleFileName = new File(moduleFilePath).getName();
// Find a used project directly used by the project (the primary project)
final IAttachedProject attachedProject = ProjectUtilities.findAttachedProjectByName(project, moduleFileName, false);
if (attachedProject != null)
{
final ModuleUsage moduleUsage = new ModuleUsage(project.getPrimaryProject(), attachedProject);
final Set<ModuleUsage> moduleUsages = Collections.singleton(moduleUsage);
final boolean readOnly = attachedProject.isReadOnly();
if (readOnly)
{
// Make the used project editable (the read-write accessibility mode)
ModulesService.setReadOnlyOnTask(moduleUsages, false);
}
// Get the first shared package of the used project
final Collection<Package> sharedPackages = ProjectUtilities.getSharedPackages(attachedProject);
final Package aPackage = sharedPackages.iterator().next();
// Create a class in the used project
SessionManager.getInstance().createSession("Create use case in used project");
final Class aCase = project.getElementsFactory().createClassInstance();
aCase.setOwner(aPackage);
aCase.setName("myClass");
SessionManager.getInstance().closeSession();
// save the used project
Application.getInstance().getProjectsManager().saveModule(project, attachedProject, true, false);
if (readOnly)
{
// Make a used project not editable (the read-only accessibility mode)
ModulesService.setReadOnlyOnTask(moduleUsages, true);
}
}

Advanced management

Use the com.nomagic.magicdraw.core.ProjectUtilities utility class for retrieving more project decomposition related information.

Use the com.nomagic.magicdraw.core.modules.ModulesService or ProjectsManager classes for managing attached projects.