@Override
 public boolean performFinish() {
   final String repositoryPath = page.getRepositoryPath();
   final IProject project = page.getProject();
   if (project == null) {
     MessageDialog.openError(getShell(), "Export Module Error", "No Java project selected.");
     return false;
   } else {
     /*IProject project = javaProject.getProject();
     List<PhasedUnit> list = CeylonBuilder.getProjectTypeChecker(project)
         .getPhasedUnits().getPhasedUnits();
     Set<String> moduleNames = new HashSet<String>();
     for (PhasedUnit phasedUnit: list) {
         Module module = phasedUnit.getUnit().getPackage().getModule();
         moduleNames.add(module.getNameAsString());
     }*/
     ex = null;
     List<TableItem> selectedItems = page.getModules();
     final String[] selectedModules = new String[selectedItems.size()];
     final String[] selectedVersions = new String[selectedItems.size()];
     for (int i = 0; i < selectedItems.size(); i++) {
       selectedModules[i] = selectedItems.get(i).getText();
       selectedVersions[i] = selectedItems.get(i).getText(1);
     }
     try {
       Job job =
           new Job("Exporting modules") {
             @Override
             protected IStatus run(IProgressMonitor monitor) {
               monitor.setTaskName("Exporting modules to repository");
               getDialogSettings().put(CLEAN_BUILD_BEFORE_EXPORT, page.isClean());
               getDialogSettings().put(RECURSIVE_EXPORT, page.isRecursive());
               if (page.isClean()) {
                 try {
                   project.build(CLEAN_BUILD, monitor);
                   project.build(AUTO_BUILD, monitor);
                 } catch (CoreException e) {
                   ex = e;
                   return Status.CANCEL_STATUS;
                 }
                 yieldRule(monitor);
               }
               try {
                 File cwd = project.getLocation().toFile();
                 String systemRepo = getInterpolatedCeylonSystemRepo(project);
                 boolean offline = CeylonProjectConfig.get(project).isOffline();
                 String output = getCeylonModulesOutputDirectory(project).getAbsolutePath();
                 List<String> outputRepositories =
                     getReferencedProjectsOutputRepositories(project);
                 outputRepositories.add(output);
                 CeylonUtils.CeylonRepoManagerBuilder rmb =
                     CeylonUtils.repoManager()
                         .cwd(cwd)
                         .systemRepo(systemRepo)
                         .extraUserRepos(outputRepositories)
                         .offline(offline)
                         .logger(new EclipseLogger());
                 RepositoryManager repo = rmb.buildManager();
                 RepositoryManager outRepo =
                     CeylonUtils.repoManager()
                         .noDefaultRepos(true)
                         .systemRepo(systemRepo)
                         .outRepo(repositoryPath)
                         .offline(offline)
                         .logger(new EclipseLogger())
                         // .user(user).password(pass)  //TODO!
                         .buildOutputManager();
                 ModuleCopycat copycat = new ModuleCopycat(repo, outRepo);
                 for (int i = 0; i < selectedModules.length; i++) {
                   String name = selectedModules[i];
                   String version = selectedVersions[i];
                   ArtifactContext artifactContext =
                       new ArtifactContext(name, version, allSuffixes());
                   artifactContext.setIgnoreDependencies(!page.isRecursive());
                   copycat.copyModule(artifactContext);
                 }
               } catch (Exception e) {
                 ex = e;
                 //                            e.printStackTrace();
                 return Status.CANCEL_STATUS;
               }
               /*File outputDir = getCeylonModulesOutputDirectory(project);
               Path outputPath = Paths.get(outputDir.getAbsolutePath());
               Path repoPath = Paths.get(repositoryPath);
               if (!Files.exists(repoPath)) {
                   MessageDialog.openError(getShell(), "Export Module Error",
                           "No repository at location: " + repositoryPath);
                   return Status.CANCEL_STATUS;
               }
               for (int i=0; i<selectedModules.length; i++) {
                   String name = selectedModules[i];
                   String version = selectedVersions[i];
                   String glob = name + '-' + version + "*";
                   String dir = name.replace('.', File.separatorChar) + File.separatorChar + version;
                   Path repoOutputPath = outputPath.resolve(dir);
                   Path repoModulePath = repoPath.resolve(dir);
                   try {
                       Files.createDirectories(repoModulePath);
                       DirectoryStream<Path> ds = Files.newDirectoryStream(repoOutputPath, glob);
                       try {
                           for (Path path: ds) {
                               Files.copy(path, repoModulePath.resolve(path.getFileName()),
                                       REPLACE_EXISTING);
                           }
                       }
                       finally {
                           ds.close();
                       }
                   }
                   catch (Exception e) {
                       ex = e;
                       return Status.CANCEL_STATUS;
                   }
               }*/
               return Status.OK_STATUS;
             }
           };
       job.setRule(getWorkspace().getRuleFactory().buildRule());
       getWorkbench().getProgressService().showInDialog(getShell(), job);
       job.setUser(true);
       job.schedule();
     } catch (Exception e) {
       e.printStackTrace();
     }
     if (ex != null) {
       ex.printStackTrace();
       MessageDialog.openError(
           getShell(),
           "Export Module Error",
           "Error occurred exporting module: " + ex.getMessage());
     }
     persistDefaultRepositoryPath(repositoryPath);
   }
   return true;
 }
 @Override
 public boolean canFinish() {
   return page.isPageComplete();
 }