Esempio n. 1
0
 @Test
 public void testLoadNull() {
   initializeExpectedProject(1);
   expect(resourceManager.get(PROJECT_INFO.projectId())).andReturn(null);
   replay(resourceManager);
   assertNull(resourceManager.get(PROJECT_INFO.projectId()));
 }
 private IFile createManifest(IProject project, IProgressMonitor monitor, PomParser bizPom) {
   String manifestTemplate = ResourceHelper.content(templateRoot + "MANIFEST.MF");
   String bizClientJar = "lib/" + bizPom.getArtifactId() + "-client.jar";
   String manifest =
       String.format(manifestTemplate, pi.getProjectName(), pi.getProjectId(), bizClientJar);
   IFolder metaInf = project.getFolder("META-INF");
   return EclipseHelper.createFile("MANIFEST.MF", metaInf, manifest, monitor);
 }
Esempio n. 3
0
 @Test
 public void testGet() {
   initializeExpectedProject(1);
   expect(resourceManager.get(PROJECT_INFO.projectId())).andReturn(expectedProject);
   replay(resourceManager);
   Project loadedProject = resourceManager.get(PROJECT_INFO.projectId());
   assertEquals(expectedProject, loadedProject);
 }
 private IFile createGuidesign(IProject project, IProgressMonitor monitor) {
   IFolder resourceFolder = (IFolder) project.findMember("src/main/resources");
   String modelTemplate = ResourceHelper.content(templateRoot + "model.guidesign");
   String path =
       "platform:/resource/" + pi.getBusinessProjectId() + "/src/main/resources/model.btdesign";
   String model =
       String.format(
           modelTemplate, path, pi.getProjectName().replace(" ", ""), resolveBusinessAppName());
   return EclipseHelper.createFile("model.guidesign", resourceFolder, model, monitor);
 }
  @Test
  public final void testGetProjectInfo() throws FailedToLoadProjectInfoException {

    // TEST
    final ProjectInfo projectInfo = Utils.getProjectInfo(Utils.class, "/auction-common.properties");

    // VERIFY
    assertThat(projectInfo.getName()).isEqualTo("Axon Auction Example - Common");
    assertThat(projectInfo.getVersion()).isNotEmpty();
    assertThat(projectInfo.getBuildTimestamp()).isNotNull();
  }
Esempio n. 6
0
 @Test
 public void testReload() {
   initializeExpectedProject(2);
   ProjectInfo newInfo = PROJECT_INFO.toBuilder().addLabel("k3", "v3").build();
   Project expectedProject =
       new Project(serviceMockReturnsOptions, new ProjectInfo.BuilderImpl(newInfo));
   expect(resourceManager.options()).andReturn(mockOptions);
   expect(resourceManager.get(PROJECT_INFO.projectId())).andReturn(expectedProject);
   replay(resourceManager);
   initializeProject();
   Project newProject = project.reload();
   assertEquals(expectedProject, newProject);
 }
Esempio n. 7
0
 /**
  * Treat the file specially if it represents a metadata file, which includes: - project
  * description file (.project) - project preferences files (*.prefs)
  *
  * <p>This method is called whenever it is discovered that a file has been modified (added,
  * removed, or changed).
  */
 public void updateMetadataFiles() throws CoreException {
   int count = path.segmentCount();
   String name = path.segment(1);
   // is this a project description file?
   if (count == 2 && name.equals(IProjectDescription.DESCRIPTION_FILE_NAME)) {
     Project project = (Project) getProject();
     project.updateDescription();
     // Discard stale project natures on ProjectInfo
     ProjectInfo projectInfo = (ProjectInfo) project.getResourceInfo(false, true);
     projectInfo.discardNatures();
     return;
   }
   // check to see if we are in the .settings directory
   if (count == 3 && EclipsePreferences.DEFAULT_PREFERENCES_DIRNAME.equals(name)) {
     ProjectPreferences.updatePreferences(this);
     return;
   }
 }
Esempio n. 8
0
 @Test
 public void testUndelete() {
   initializeExpectedProject(1);
   expect(resourceManager.options()).andReturn(mockOptions);
   resourceManager.undelete(PROJECT_INFO.projectId());
   replay(resourceManager);
   initializeProject();
   project.undelete();
 }
Esempio n. 9
0
 @Test
 public void testReloadNull() {
   initializeExpectedProject(1);
   expect(resourceManager.options()).andReturn(mockOptions);
   expect(resourceManager.get(PROJECT_INFO.projectId())).andReturn(null);
   replay(resourceManager);
   Project reloadedProject =
       new Project(resourceManager, new ProjectInfo.BuilderImpl(PROJECT_INFO)).reload();
   assertNull(reloadedProject);
 }
 private IFile createPom(IProject project, IProgressMonitor monitor, PomParser bizPom)
     throws CoreException {
   String pomTemplate = ResourceHelper.content(templateRoot + "pom.xml");
   String pom =
       String.format(
           pomTemplate,
           bizPom.getGroupId(),
           bizPom.getParentArtifactId(),
           bizPom.getVersion(),
           pi.getProjectId(),
           bizPom.getArtifactId());
   return EclipseHelper.createFile("pom.xml", project, pom, monitor);
 }
Esempio n. 11
0
 protected IStatus run(IProgressMonitor monitor) {
   IValidatorOutput output = null;
   try {
     output = createOutput();
     for (Iterator i = byProject.entrySet().iterator(); i.hasNext(); ) {
       Map.Entry entry = (Map.Entry) i.next();
       final IProject project = (IProject) entry.getKey();
       final ProjectInfo info = (ProjectInfo) entry.getValue();
       invokeValidationFor(
           output,
           DLTKCore.create(project),
           info.elementsToArray(),
           info.resourcesToArray(),
           monitor);
     }
   } finally {
     if (output != null) {
       output.close();
     }
   }
   return Status.OK_STATUS;
 }
    private IProject createProject(IProgressMonitor monitor) {
      Set<String> refs = new HashSet<String>();
      refs.add("org.eclipse.ui");
      refs.add("org.eclipse.core.runtime");
      refs.add("org.eclipse.core.resources");
      refs.add("org.eclipse.ui.ide");
      refs.add("org.eclipse.jdt.core");

      IProject project =
          EclipseHelper.createRichClientProject(
              pi.getProjectId(), Collections.<IProject>emptyList(), refs, monitor, getShell());
      monitor.worked(1);
      return project;
    }
Esempio n. 13
0
  /**
   * Get the runtime value of an expression. <br>
   * <li><b>"current" </b> points to the current project object.
   * <li>Characters in '' will keep there original string value.
   * <li>Other tokens will be treated as property key of current project. <br>
   *     <br>
   *     e.g: "utest.report.base.dir, '/', current.projectName" will be split into three tokens:
   *     Runtime value for "utest.report.base.dir" will be retrieved from current project, '/' will
   *     keep its original value, while "current.projectName" will be the current project name.
   *
   * @param info
   * @param key
   * @return
   */
  private String getRuntimeValue(ProjectInfo info, String key) {

    final String CURRENT_KEY = "current"; // $NON-NLS-1$

    if (key.startsWith(CURRENT_KEY)) {
      // e.g:
      // projectInfo.getAttribute( "projectName" )
      // projectInfo.getAttribute( "baseDir" )

      return info.getValue(key.substring(CURRENT_KEY.length() + 1));
    } else if (key.startsWith("'") && key.endsWith("'")) // $NON-NLS-1$//$NON-NLS-2$
    {
      return key.substring(1, key.length() - 1);
    } else return getProject().getProperty(key);
  }
    @Override
    protected void execute(IProgressMonitor monitor)
        throws CoreException, InvocationTargetException, InterruptedException {
      try {
        monitor.beginTask("Creating project " + pi.getProjectName(), 2);

        IProject project = createProject(monitor);
        if (project == null) {
          return;
        }

        PomParser bizPom = parseBizPom();
        createWorkflow(project, monitor);
        IFile fileToOpen = createGuidesign(project, monitor);
        createGeneratorProperties(project, monitor, bizPom);
        createSpecialCasesXpt(project, monitor);
        createSpecialCasesExt(project, monitor);
        createBuildProperties(project, monitor, bizPom);
        createPom(project, monitor, bizPom);
        createManifest(project, monitor, bizPom);
        createSpringHandlers(project, monitor);
        createSpringSchemas(project, monitor);

        createIcons(project, monitor);

        openFile(monitor, fileToOpen);
        monitor.worked(1);

      } catch (final RuntimeException e) {
        PluginLog.logError(e);
        Display.getDefault()
            .asyncExec(
                new Runnable() {
                  @Override
                  public void run() {
                    String message = "Problem when creating rich client project: " + e.getMessage();
                    IStatus status =
                        PluginLog.createStatus(IStatus.ERROR, IStatus.CANCEL, e.getMessage(), e);
                    ErrorDialog.openError(
                        Display.getCurrent().getActiveShell(),
                        "Rich client project wizard",
                        message,
                        status);
                  }
                });
      }
    }
 private String parseFileContent(String fileName) throws CoreException {
   // TODO we should use the project path instead of its name, but
   // don't know how to do that
   IWorkspace workspace = ResourcesPlugin.getWorkspace();
   IProject bizProj = workspace.getRoot().getProject(pi.getBusinessProjectId());
   IFile bizFile = bizProj.getFile(fileName);
   if (!bizFile.exists()) {
     throw new RuntimeException("Missing " + fileName + " in business tier project: " + bizFile);
   }
   BufferedReader bizReader;
   try {
     bizReader =
         new BufferedReader(new InputStreamReader(bizFile.getContents(), bizFile.getCharset()));
   } catch (UnsupportedEncodingException e) {
     throw new RuntimeException(e.getMessage(), e);
   }
   return ResourceHelper.content(bizReader);
 }
Esempio n. 16
0
  /**
   * Execute all nestedTasks.
   *
   * @throws BuildException if one of the nested tasks fails.
   */
  public void execute() throws BuildException {
    Object o = getProject().getReference(refID);
    ProjectList list;
    if (o instanceof ProjectList) {
      list = (ProjectList) o;
    } else {
      log(
          "ForEach only support one ProjectList reference!", //$NON-NLS-1$
          Project.MSG_ERR);
      throw new BuildException("ForEach only support one ProjectList reference!"); // $NON-NLS-1$
    }

    for (int i = 0; i < list.getCount(); i++) {
      ProjectInfo projectInfo = list.getProject(i);

      // register dynamic property

      for (int j = 0; j < dynamicProperties.size(); j++) {
        DynamicProperty property = (DynamicProperty) dynamicProperties.get(j);
        getDynamicValue(projectInfo, property);
      }

      // ================= Add Build Listeners
      // ============================
      DefaultLogger logger = null;
      if (loggerPath != null) {
        File loggerPathDir = new File(loggerPath);
        if (!loggerPathDir.exists()) loggerPathDir.mkdir();

        if (!loggerPathDir.isDirectory())
          throw new BuildException(
              "loggerPath attribute should reference to a directory."); //$NON-NLS-1$

        // Add INFO level logger.
        logger = new DefaultLogger();
        PrintStream str = null;
        try {
          String fileName =
              projectInfo.getValue("projectName") + "_log.txt"; // $NON-NLS-1$//$NON-NLS-2$
          str =
              new PrintStream(
                  new FileOutputStream(new File(loggerPathDir, fileName), true),
                  true); //$NON-NLS-1$
        } catch (FileNotFoundException e1) {
          e1.printStackTrace();
        }
        logger.setMessageOutputLevel(Project.MSG_INFO);
        logger.setErrorPrintStream(str);
        logger.setOutputPrintStream(str);
        getProject().addBuildListener(logger);
      }
      // ================= End of adding Build Listeners
      // ============================

      for (Enumeration e = nestedTasks.elements(); e.hasMoreElements(); ) {
        Task nestedTask = (Task) e.nextElement();

        try {
          nestedTask.perform();
          getProject().setProperty(failurePropertyName, TASK_STATUS_PASS); // $NON-NLS-1$
        } catch (BuildException ex) {

          log(
              "Execution error on task: ["
                  + nestedTask.getTaskName()
                  + "] message: "
                  + ex.toString(),
              Project.MSG_WARN); // $NON-NLS-1$ //$NON-NLS-2$

          // Check for Ant execution, check to see whether the
          // individual project
          // failed on itself or failed on dependencies.

          if ("Ant".equalsIgnoreCase(nestedTask.getTaskName())) // $NON-NLS-1$
          {
            if (isThisProjectError(ex)) {
              getProject().setProperty(failurePropertyName, TASK_STATUS_FAIL); // $NON-NLS-1$
              log("Project failed on itself: ", Project.MSG_ERR); // $NON-NLS-1$
            } else {
              getProject().setProperty(failurePropertyName, TASK_STATUS_FAIL_ON_DEPENDENCY);
              log("Project failed on dependencies:", Project.MSG_WARN); // $NON-NLS-1$ //$NON-NLS-2$
            }
          }

          if (failOnError) {
            throw ex;
          }

          log("Continue execution.", Project.MSG_INFO); // $NON-NLS-1$
        }
      }

      // Remove Build Listener.
      if (logger != null) getProject().removeBuildListener(logger);
    }
  }
Esempio n. 17
0
public class ProjectTest {
  private static final String PROJECT_ID = "project-id";
  private static final String NAME = "myProj";
  private static final Map<String, String> LABELS = ImmutableMap.of("k1", "v1", "k2", "v2");
  private static final Long PROJECT_NUMBER = 123L;
  private static final Long CREATE_TIME_MILLIS = 123456789L;
  private static final ProjectInfo.State STATE = ProjectInfo.State.DELETE_REQUESTED;
  private static final ProjectInfo PROJECT_INFO =
      ProjectInfo.builder(PROJECT_ID)
          .name(NAME)
          .labels(LABELS)
          .projectNumber(PROJECT_NUMBER)
          .createTimeMillis(CREATE_TIME_MILLIS)
          .state(STATE)
          .build();
  private static final Identity USER = Identity.user("*****@*****.**");
  private static final Identity SERVICE_ACCOUNT =
      Identity.serviceAccount("*****@*****.**");
  private static final Policy POLICY =
      Policy.builder()
          .addIdentity(ProjectRole.OWNER.value(), USER)
          .addIdentity(ProjectRole.EDITOR.value(), SERVICE_ACCOUNT)
          .build();

  private ResourceManager serviceMockReturnsOptions = createStrictMock(ResourceManager.class);
  private ResourceManagerOptions mockOptions = createMock(ResourceManagerOptions.class);
  private ResourceManager resourceManager;
  private Project expectedProject;
  private Project project;

  @Before
  public void setUp() {
    resourceManager = createStrictMock(ResourceManager.class);
  }

  @After
  public void tearDown() throws Exception {
    verify(resourceManager);
  }

  private void initializeExpectedProject(int optionsCalls) {
    expect(serviceMockReturnsOptions.options()).andReturn(mockOptions).times(optionsCalls);
    replay(serviceMockReturnsOptions);
    expectedProject =
        new Project(serviceMockReturnsOptions, new ProjectInfo.BuilderImpl(PROJECT_INFO));
  }

  private void initializeProject() {
    project = new Project(resourceManager, new ProjectInfo.BuilderImpl(PROJECT_INFO));
  }

  @Test
  public void testToBuilder() {
    initializeExpectedProject(4);
    replay(resourceManager);
    compareProjects(expectedProject, expectedProject.toBuilder().build());
  }

  @Test
  public void testBuilder() {
    expect(resourceManager.options()).andReturn(mockOptions).times(7);
    replay(resourceManager);
    Project.Builder builder =
        new Project.Builder(new Project(resourceManager, new ProjectInfo.BuilderImpl("wrong-id")));
    Project project =
        builder
            .projectId(PROJECT_ID)
            .name(NAME)
            .labels(LABELS)
            .projectNumber(PROJECT_NUMBER)
            .createTimeMillis(CREATE_TIME_MILLIS)
            .state(STATE)
            .build();
    assertEquals(PROJECT_ID, project.projectId());
    assertEquals(NAME, project.name());
    assertEquals(LABELS, project.labels());
    assertEquals(PROJECT_NUMBER, project.projectNumber());
    assertEquals(CREATE_TIME_MILLIS, project.createTimeMillis());
    assertEquals(STATE, project.state());
    assertEquals(resourceManager.options(), project.resourceManager().options());
    assertNull(project.parent());
    ResourceId parent = new ResourceId("id", "type");
    project =
        project
            .toBuilder()
            .clearLabels()
            .addLabel("k3", "v3")
            .addLabel("k4", "v4")
            .removeLabel("k4")
            .parent(parent)
            .build();
    assertEquals(PROJECT_ID, project.projectId());
    assertEquals(NAME, project.name());
    assertEquals(ImmutableMap.of("k3", "v3"), project.labels());
    assertEquals(PROJECT_NUMBER, project.projectNumber());
    assertEquals(CREATE_TIME_MILLIS, project.createTimeMillis());
    assertEquals(STATE, project.state());
    assertEquals(resourceManager.options(), project.resourceManager().options());
    assertEquals(parent, project.parent());
  }

  @Test
  public void testGet() {
    initializeExpectedProject(1);
    expect(resourceManager.get(PROJECT_INFO.projectId())).andReturn(expectedProject);
    replay(resourceManager);
    Project loadedProject = resourceManager.get(PROJECT_INFO.projectId());
    assertEquals(expectedProject, loadedProject);
  }

  @Test
  public void testReload() {
    initializeExpectedProject(2);
    ProjectInfo newInfo = PROJECT_INFO.toBuilder().addLabel("k3", "v3").build();
    Project expectedProject =
        new Project(serviceMockReturnsOptions, new ProjectInfo.BuilderImpl(newInfo));
    expect(resourceManager.options()).andReturn(mockOptions);
    expect(resourceManager.get(PROJECT_INFO.projectId())).andReturn(expectedProject);
    replay(resourceManager);
    initializeProject();
    Project newProject = project.reload();
    assertEquals(expectedProject, newProject);
  }

  @Test
  public void testLoadNull() {
    initializeExpectedProject(1);
    expect(resourceManager.get(PROJECT_INFO.projectId())).andReturn(null);
    replay(resourceManager);
    assertNull(resourceManager.get(PROJECT_INFO.projectId()));
  }

  @Test
  public void testReloadNull() {
    initializeExpectedProject(1);
    expect(resourceManager.options()).andReturn(mockOptions);
    expect(resourceManager.get(PROJECT_INFO.projectId())).andReturn(null);
    replay(resourceManager);
    Project reloadedProject =
        new Project(resourceManager, new ProjectInfo.BuilderImpl(PROJECT_INFO)).reload();
    assertNull(reloadedProject);
  }

  @Test
  public void testResourceManager() {
    initializeExpectedProject(1);
    replay(resourceManager);
    assertEquals(serviceMockReturnsOptions, expectedProject.resourceManager());
  }

  @Test
  public void testDelete() {
    initializeExpectedProject(1);
    expect(resourceManager.options()).andReturn(mockOptions);
    resourceManager.delete(PROJECT_INFO.projectId());
    replay(resourceManager);
    initializeProject();
    project.delete();
  }

  @Test
  public void testUndelete() {
    initializeExpectedProject(1);
    expect(resourceManager.options()).andReturn(mockOptions);
    resourceManager.undelete(PROJECT_INFO.projectId());
    replay(resourceManager);
    initializeProject();
    project.undelete();
  }

  @Test
  public void testReplace() {
    initializeExpectedProject(2);
    Project expectedReplacedProject = expectedProject.toBuilder().addLabel("k3", "v3").build();
    expect(resourceManager.options()).andReturn(mockOptions).times(2);
    expect(resourceManager.replace(anyObject(Project.class))).andReturn(expectedReplacedProject);
    replay(resourceManager);
    initializeProject();
    Project newProject =
        new Project(resourceManager, new ProjectInfo.BuilderImpl(expectedReplacedProject));
    Project actualReplacedProject = newProject.replace();
    compareProjectInfos(expectedReplacedProject, actualReplacedProject);
  }

  @Test
  public void testGetPolicy() {
    expect(resourceManager.options()).andReturn(mockOptions).times(1);
    expect(resourceManager.getPolicy(PROJECT_ID)).andReturn(POLICY);
    replay(resourceManager);
    initializeProject();
    assertEquals(POLICY, project.getPolicy());
  }

  @Test
  public void testReplacePolicy() {
    expect(resourceManager.options()).andReturn(mockOptions).times(1);
    expect(resourceManager.replacePolicy(PROJECT_ID, POLICY)).andReturn(POLICY);
    replay(resourceManager);
    initializeProject();
    assertEquals(POLICY, project.replacePolicy(POLICY));
  }

  @Test
  public void testTestPermissions() {
    List<Boolean> response = ImmutableList.of(true, true);
    String getPermission = "resourcemanager.projects.get";
    String deletePermission = "resourcemanager.projects.delete";
    expect(resourceManager.options()).andReturn(mockOptions).times(1);
    expect(
            resourceManager.testPermissions(
                PROJECT_ID, ImmutableList.of(getPermission, deletePermission)))
        .andReturn(response);
    replay(resourceManager);
    initializeProject();
    assertEquals(
        response, project.testPermissions(ImmutableList.of(getPermission, deletePermission)));
  }

  private void compareProjects(Project expected, Project value) {
    assertEquals(expected, value);
    compareProjectInfos(expected, value);
    assertEquals(expected.resourceManager().options(), value.resourceManager().options());
  }

  private void compareProjectInfos(ProjectInfo expected, ProjectInfo value) {
    assertEquals(expected.projectId(), value.projectId());
    assertEquals(expected.name(), value.name());
    assertEquals(expected.labels(), value.labels());
    assertEquals(expected.projectNumber(), value.projectNumber());
    assertEquals(expected.createTimeMillis(), value.createTimeMillis());
    assertEquals(expected.state(), value.state());
    assertEquals(expected.parent(), value.parent());
  }
}
Esempio n. 18
0
 private void compareProjectInfos(ProjectInfo expected, ProjectInfo value) {
   assertEquals(expected.projectId(), value.projectId());
   assertEquals(expected.name(), value.name());
   assertEquals(expected.labels(), value.labels());
   assertEquals(expected.projectNumber(), value.projectNumber());
   assertEquals(expected.createTimeMillis(), value.createTimeMillis());
   assertEquals(expected.state(), value.state());
   assertEquals(expected.parent(), value.parent());
 }
Esempio n. 19
0
 public DotClassPathFile(ProjectInfo project) {
   super(project.getProject().getFile(".classpath"));
   this.project = project;
 }
Esempio n. 20
0
  private static List<String> update(
      ProjectInfo project,
      List<String> lines,
      Set<ProjectInfo> projectDeps,
      List<Dependency> deps) {
    lines = new ArrayList<String>(lines);
    if (lines.isEmpty()) {
      lines.add("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
      lines.add("<classpath>");
      lines.add("</classpath>");
    }
    for (Dependency dep : deps) {
      if (dep.jar.trim().equals("")) continue;
      int line = indexOfLineContaining(lines, dep.jar);
      if (line != -1) {
        lines.remove(line);
      }
    }
    for (int i = lines.size() - 1; i >= 0; i--) {
      if (lines.get(i).contains("from=\"sbt\"")) {
        lines.remove(i);
      }
    }

    int line = indexOfLineContaining(lines, "</classpath>");
    if (line < 0) {
      line = lines.size();
    }
    boolean scalaContainer = indexOfLineContaining(lines, "SCALA_CONTAINER") != -1;
    scalaContainer = true; // always skip scala library
    TreeMap<String, Dependency> sortedDeps = new TreeMap<String, Dependency>();
    for (Dependency dep : deps) {
      sortedDeps.put(dep.name, dep);
    }
    for (Dependency dep : sortedDeps.values()) {
      if (scalaContainer && dep.name.equals("scala-library")) continue;
      lines.add(
          line++,
          "\t<classpathentry from=\"sbt\" kind=\"lib\" path=\""
              + dep.jar.trim()
              + "\""
              + (!dep.srcJar.trim().isEmpty() ? " sourcepath=\"" + dep.srcJar.trim() + "\"" : "")
              + "/>");
    }
    for (ProjectInfo dep : projectDeps) {
      lines.add(
          line++,
          "\t<classpathentry from=\"sbt\" combineaccessrules=\"false\" kind=\"src\" path=\"/"
              + dep.getProject().getName()
              + "\"/>");
    }

    if (indexOfLineContaining(lines, "kind=\"con\"") < 0) {
      //			lines.add(line++, "\t<classpathentry kind=\"con\"
      // path=\"org.eclipse.jdt.launching.JRE_CONTAINER\"/>");
    }
    if (indexOfLineContaining(lines, "kind=\"output\"") < 0) {
      lines.add(line++, "\t<classpathentry from=\"sbt\" kind=\"output\" path=\"target/classes\"/>");
    }
    @SuppressWarnings("unchecked")
    List<String>[] sourcePaths =
        new List[] {
          project.getSourceDirectories(),
          project.getResourceDirectories(),
          project.getTestSourceDirectories(),
          project.getTestResourceDirectories()
        };
    for (List<String> paths : sourcePaths) {
      for (String path : paths) {
        if (project.getProject().getFolder(path).exists()) {
          if (indexOfLineContaining(lines, path) < 0) {
            lines.add(
                line++, "\t<classpathentry from=\"sbt\" kind=\"src\" path=\"" + path + "\"/>");
          }
        }
      }
    }

    return lines;
  }