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.