package org.simantics.interop.issues; import org.simantics.db.AsyncReadGraph; import org.simantics.db.ReadGraph; import org.simantics.db.procedure.AsyncListener; import org.simantics.db.request.Read; import org.simantics.utils.ui.ErrorLogger; /** * An issue whose state can be updated with an query * @author Marko Luukkainen * */ public class GraphIssue extends AbstractIssue { private boolean disposed = false; /** * Creates an new Graph Issue * @param g access to graph * @param request Request that returns true if issue is still valid. If the request returns false, the issue is disposed. * @param description */ public GraphIssue(ReadGraph g, Read request, String description) { setDescription(description); IssueReporter.getInstance().addIssue(this); setRequest(g, request); } public GraphIssue(String description) { setDescription(description); IssueReporter.getInstance().addIssue(this); } public void setRequest(ReadGraph g, Read request) { g.asyncRequest(request,new AsyncListener() { @Override public void execute(AsyncReadGraph graph, Boolean result) { if (result == null) return; if (!result) { dispose(); } } @Override public void exception(AsyncReadGraph graph, Throwable throwable) { ErrorLogger.defaultLogError("Error in GraphIssue handling, disposing issue \"" + getDescription()+"\"", throwable); dispose(); } @Override public boolean isDisposed() { return disposed; } }); } @Override public void showInEditor() { } @Override public boolean supportsEditor() { return false; } @Override public void dispose() { this.disposed = true; super.dispose(); } }