/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.ide.ext.java.client.resource;
import com.google.common.base.Optional;
import org.eclipse.che.ide.api.resources.Project;
import org.eclipse.che.ide.api.resources.Resource;
import org.eclipse.che.ide.api.resources.ResourceInterceptor;
import org.eclipse.che.ide.ext.java.shared.Constants;
import org.eclipse.che.ide.ext.java.shared.ContentRoot;
import org.eclipse.che.ide.resource.Path;
import java.util.Arrays;
import java.util.List;
import static com.google.common.base.Preconditions.checkArgument;
import static org.eclipse.che.ide.ext.java.client.util.JavaUtil.isJavaProject;
import static org.eclipse.che.ide.ext.java.shared.ContentRoot.SOURCE;
/**
* Intercepts given resource and sets source folder marker if current resource is folder and its path equals to configured in project.
*
* @author Vlad Zhukovskiy
*/
public class SourceFolderInterceptor implements ResourceInterceptor {
@Override
public final void intercept(Resource resource) {
checkArgument(resource != null, "Null resource occurred");
if (resource.isFolder()) {
final Optional<Project> project = resource.getRelatedProject();
if (project.isPresent() && isJavaProject(project.get())) {
final Path resourcePath = resource.getLocation();
for (Path path : getPaths(project.get(), getAttribute())) {
if (path.equals(resourcePath)) {
resource.addMarker(new SourceFolderMarker(getContentRoot()));
return;
}
}
}
}
}
protected ContentRoot getContentRoot() {
return SOURCE;
}
protected String getAttribute() {
return Constants.SOURCE_FOLDER;
}
protected final Path[] getPaths(Project project, String srcType) {
final List<String> srcFolders = project.getAttributes().get(srcType);
if (srcFolders == null || srcFolders.isEmpty()) {
return new Path[0];
}
Path[] paths = new Path[0];
for (String srcFolder : srcFolders) {
final int index = paths.length;
paths = Arrays.copyOf(paths, index + 1);
paths[index] = project.getLocation().append(srcFolder);
}
return paths;
}
}