Skip to content

Commit

Permalink
CHE-6162: Fix problem project detection procedure (#6264)
Browse files Browse the repository at this point in the history
* Fix problem project detection

Signed-off-by: Vitalii Parfonov <vparfonov@redhat.com>

* Add problems descriptor to MutableProjectConfig

Signed-off-by: Vitalii Parfonov <vparfonov@redhat.com>

* Avoid call updatePresntation on get

Signed-off-by: Vitalii Parfonov <vparfonov@redhat.com>

* Move class to the shared lib

Signed-off-by: Vitalii Parfonov <vparfonov@redhat.com>
  • Loading branch information
vparfonov committed Sep 14, 2017
1 parent a27da49 commit d14dae9
Show file tree
Hide file tree
Showing 21 changed files with 270 additions and 137 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,6 @@ public interface ProjectConfig {
Map<String, List<String>> getAttributes();

SourceStorage getSource();

List<? extends ProjectProblem> getProblems();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/*
* Copyright (c) 2012-2017 Red Hat, Inc.
* 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:
* Red Hat, Inc. - initial API and implementation
*/
package org.eclipse.che.api.core.model.project;

/** @author Vitalii Parfonov */
public interface ProjectProblem {

int getCode();

String getMessage();
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import java.util.Map;
import org.eclipse.che.api.core.model.project.NewProjectConfig;
import org.eclipse.che.api.core.model.project.ProjectConfig;
import org.eclipse.che.api.core.model.project.ProjectProblem;
import org.eclipse.che.api.core.model.project.SourceStorage;
import org.eclipse.che.api.machine.shared.dto.CommandDto;

Expand All @@ -35,6 +36,7 @@ public class MutableProjectConfig implements ProjectConfig {
private Map<String, String> options;
private List<NewProjectConfig> projects;
private List<CommandDto> commands;
private List<? extends ProjectProblem> problems;

public MutableProjectConfig(ProjectConfig source) {
name = source.getName();
Expand All @@ -44,6 +46,7 @@ public MutableProjectConfig(ProjectConfig source) {
mixins = newArrayList(source.getMixins());
attributes = newHashMap(source.getAttributes());
sourceStorage = new MutableSourceStorage(source.getSource());
problems = source.getProblems();
}

public MutableProjectConfig() {}
Expand Down Expand Up @@ -119,6 +122,11 @@ public MutableSourceStorage getSource() {
return sourceStorage;
}

@Override
public List<? extends ProjectProblem> getProblems() {
return problems;
}

public void setSource(SourceStorage sourceStorage) {
this.sourceStorage = new MutableSourceStorage(sourceStorage);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,12 @@
package org.eclipse.che.ide.api.project;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.che.api.core.model.project.NewProjectConfig;
import org.eclipse.che.api.core.model.project.ProjectProblem;
import org.eclipse.che.api.core.model.project.SourceStorage;
import org.eclipse.che.api.project.templates.shared.dto.ProjectTemplateDescriptor;
import org.eclipse.che.api.workspace.shared.dto.NewProjectConfigDto;
Expand Down Expand Up @@ -170,4 +172,9 @@ public void setOptions(Map<String, String> options) {
public SourceStorage getSource() {
return sourceStorage;
}

@Override
public List<ProjectProblem> getProblems() {
return Collections.emptyList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -478,26 +478,30 @@ public void submit(Path path) {

@Override
public void onExecute() {
if (view.getTree().getNodeLoader().isBusy()) {
delay(500);
Scheduler.get()
.scheduleDeferred(
() -> {
if (view.getTree().getNodeLoader().isBusy()) {
delay(500);

return;
}
return;
}

final Set<Path> updateQueue = Sets.newHashSet(toRefresh);
toRefresh.clear();
final Set<Path> updateQueue = Sets.newHashSet(toRefresh);
toRefresh.clear();

for (Path path : updateQueue) {
final Node node = getNode(path);
for (Path path : updateQueue) {
final Node node = getNode(path);

if (node == null) {
continue;
}
if (node == null) {
continue;
}

if (getTree().isExpanded(node)) {
view.getTree().getNodeLoader().loadChildren(node, true);
}
}
if (getTree().isExpanded(node)) {
view.getTree().getNodeLoader().loadChildren(node, true);
}
}
});
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,17 @@
import com.google.common.base.Optional;
import com.google.inject.Inject;
import com.google.inject.assistedinject.Assisted;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.eclipse.che.api.core.model.project.ProjectConfig;
import org.eclipse.che.api.core.model.project.ProjectProblem;
import org.eclipse.che.api.core.model.project.SourceStorage;
import org.eclipse.che.api.project.shared.dto.SourceEstimation;
import org.eclipse.che.api.promises.client.Promise;
import org.eclipse.che.api.promises.client.PromiseProvider;
import org.eclipse.che.api.workspace.shared.ProjectProblemImpl;
import org.eclipse.che.ide.api.resources.Project;
import org.eclipse.che.ide.api.resources.marker.Marker;
import org.eclipse.che.ide.resource.Path;
Expand All @@ -43,6 +47,7 @@ class ProjectImpl extends ContainerImpl implements Project {
private static final int FOLDER_NOT_EXISTS_ON_FS = 10;

private final ProjectConfig reference;
private final List<ProjectProblem> problems;

@Inject
protected ProjectImpl(
Expand All @@ -52,6 +57,16 @@ protected ProjectImpl(
super(Path.valueOf(reference.getPath()), resourceManager, promiseProvider);

this.reference = reference;
if (reference.getProblems() != null) {
problems =
reference
.getProblems()
.stream()
.map(problem -> new ProjectProblemImpl(problem.getCode(), problem.getMessage()))
.collect(Collectors.toList());
} else {
problems = Collections.emptyList();
}
}

/** {@inheritDoc} */
Expand Down Expand Up @@ -96,6 +111,11 @@ public SourceStorage getSource() {
return reference.getSource();
}

@Override
public List<ProjectProblem> getProblems() {
return problems;
}

/** {@inheritDoc} */
@Override
public ProjectRequest update() {
Expand Down Expand Up @@ -126,7 +146,7 @@ public Promise<Project> send() {
/** {@inheritDoc} */
@Override
public boolean isProblem() {
return getMarker(ProblemProjectMarker.PROBLEM_PROJECT).isPresent();
return reference.getProblems() != null && !reference.getProblems().isEmpty();
}

/** {@inheritDoc} */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@
import java.util.Set;
import javax.validation.constraints.NotNull;
import org.eclipse.che.api.promises.client.Function;
import org.eclipse.che.api.promises.client.FunctionException;
import org.eclipse.che.api.promises.client.Promise;
import org.eclipse.che.ide.api.data.HasDataObject;
import org.eclipse.che.ide.api.data.tree.AbstractTreeNode;
Expand Down Expand Up @@ -122,22 +121,20 @@ protected Promise<List<Node>> getChildrenImpl() {
return ((Container) getData())
.getChildren()
.then(
new Function<Resource[], List<Node>>() {
@Override
public List<Node> apply(Resource[] children) throws FunctionException {
if (children == null || children.length == 0) {
return NO_CHILDREN;
}

final List<Node> nodes = newArrayListWithExpectedSize(children.length);

for (Resource child : children) {
nodes.add(createNode(child));
}

return unmodifiableList(nodes);
}
});
(Function<Resource[], List<Node>>)
children -> {
if (children == null || children.length == 0) {
return NO_CHILDREN;
}

final List<Node> nodes = newArrayListWithExpectedSize(children.length);

for (Resource child : children) {
nodes.add(createNode(child));
}

return unmodifiableList(nodes);
});
}

@Override
Expand All @@ -146,14 +143,15 @@ public final NodePresentation getPresentation(boolean update) {
nodePresentation = new NodePresentation();
}

updatePresentation(nodePresentation);
if (update) {
updatePresentation(nodePresentation);
}

return nodePresentation;
}

@Override
public void updatePresentation(@NotNull NodePresentation presentation) {

final StringBuilder cssBuilder = new StringBuilder();

final Optional<Marker> presentableTextMarker = getData().getMarker(PresentableTextMarker.ID);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1137,50 +1137,56 @@ private void redraw(Node parent) {
}

private void onExpand(Node node, NodeDescriptor nodeDescriptor, boolean deep) {
if (isLeaf(node)) {
return;
}
Scheduler.get()
.scheduleDeferred(
() -> {
if (isLeaf(node)) {
return;
}

if (nodeDescriptor.isLoading()) { //node may have been already requested for expanding
return;
}
if (nodeDescriptor.isLoading()) { //node may have been already requested for expanding
return;
}

if (!nodeDescriptor.isExpanded() && nodeLoader != null && (!nodeDescriptor.isLoaded())) {
nodeStorage.removeChildren(node);
nodeDescriptor.setExpand(true);
nodeDescriptor.setExpandDeep(deep);
nodeDescriptor.setLoading(true);
view.onLoadChange(nodeDescriptor, true);
nodeLoader.loadChildren(node);
return;
}
if (!nodeDescriptor.isExpanded()
&& nodeLoader != null
&& (!nodeDescriptor.isLoaded())) {
nodeStorage.removeChildren(node);
nodeDescriptor.setExpand(true);
nodeDescriptor.setExpandDeep(deep);
nodeDescriptor.setLoading(true);
view.onLoadChange(nodeDescriptor, true);
nodeLoader.loadChildren(node);
return;
}

if (!fireCancellableEvent(new BeforeExpandNodeEvent(node))) {
if (deep) {
nodeDescriptor.setExpandDeep(false);
}
if (!fireCancellableEvent(new BeforeExpandNodeEvent(node))) {
if (deep) {
nodeDescriptor.setExpandDeep(false);
}

return;
}
return;
}

if (!nodeDescriptor.isExpanded()) {
nodeDescriptor.setExpanded(true);
if (!nodeDescriptor.isExpanded()) {
nodeDescriptor.setExpanded(true);

if (!nodeDescriptor.isChildrenRendered()) {
renderChildren(node);
nodeDescriptor.setChildrenRendered(true);
}
if (!nodeDescriptor.isChildrenRendered()) {
renderChildren(node);
nodeDescriptor.setChildrenRendered(true);
}

//direct expand on the view
view.expand(nodeDescriptor);
//direct expand on the view
view.expand(nodeDescriptor);

update();
fireEvent(new ExpandNodeEvent(node));
}
update();
fireEvent(new ExpandNodeEvent(node));
}

if (deep) {
setExpandChildren(node, true);
}
if (deep) {
setExpandChildren(node, true);
}
});
}

private void setExpandChildren(Node node, boolean expand) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import java.util.stream.Collectors;
import org.eclipse.che.api.core.ServerException;
import org.eclipse.che.api.core.model.project.ProjectConfig;
import org.eclipse.che.api.core.model.project.ProjectProblem;
import org.eclipse.che.api.core.model.project.SourceStorage;
import org.eclipse.che.api.core.model.project.type.Attribute;
import org.eclipse.che.api.project.server.importer.ProjectImporter;
Expand Down Expand Up @@ -146,7 +147,9 @@ public static SourceStorageDto asDto(SourceStorage sourceStorage) {
return storageDto;
}

public static ProjectProblemDto asDto(RegisteredProject.Problem problem) {
return newDto(ProjectProblemDto.class).withCode(problem.code).withMessage(problem.message);
public static ProjectProblemDto asDto(ProjectProblem problem) {
return newDto(ProjectProblemDto.class)
.withCode(problem.getCode())
.withMessage(problem.getMessage());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,11 @@
import static com.google.common.collect.Maps.newHashMap;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.eclipse.che.api.core.model.project.NewProjectConfig;
import org.eclipse.che.api.core.model.project.ProjectProblem;
import org.eclipse.che.api.core.model.project.SourceStorage;
import org.eclipse.che.api.project.server.type.BaseProjectType;
import org.eclipse.che.api.vfs.Path;
Expand Down Expand Up @@ -154,6 +156,11 @@ public SourceStorage getSource() {
return origin;
}

@Override
public List<ProjectProblem> getProblems() {
return Collections.emptyList();
}

@Override
public void setOptions(Map<String, String> options) {
this.options = options;
Expand Down
Loading

0 comments on commit d14dae9

Please sign in to comment.