diff options
author | Tom Schindl | 2015-02-16 22:05:55 +0000 |
---|---|---|
committer | Tom Schindl | 2015-02-16 22:05:55 +0000 |
commit | f0f4c6e29972f2ab2c58f12b05e161c8740cc5e5 (patch) | |
tree | 889df80f7f5431f14f6d017ea02c4c680f5f33af /experimental | |
parent | 968ddcc0c0d65cf4d5a4a90c5739662c6e10f209 (diff) | |
download | org.eclipse.efxclipse-f0f4c6e29972f2ab2c58f12b05e161c8740cc5e5.tar.gz org.eclipse.efxclipse-f0f4c6e29972f2ab2c58f12b05e161c8740cc5e5.tar.xz org.eclipse.efxclipse-f0f4c6e29972f2ab2c58f12b05e161c8740cc5e5.zip |
current source state of compensator
Diffstat (limited to 'experimental')
86 files changed, 1735 insertions, 207 deletions
diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/.classpath b/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/.classpath new file mode 100644 index 000000000..eca7bdba8 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/.classpath @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> + <classpathentry kind="src" path="src"/> + <classpathentry kind="output" path="bin"/> +</classpath> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/.gitignore b/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/.gitignore new file mode 100644 index 000000000..ae3c17260 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/.project b/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/.project new file mode 100644 index 000000000..aaca9a7d9 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/.project @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>org.eclipse.fx.code.compensator.project.bt.github</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.ManifestBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.SchemaBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.ds.core.builder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.pde.PluginNature</nature> + <nature>org.eclipse.jdt.core.javanature</nature> + </natures> +</projectDescription> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/.settings/org.eclipse.jdt.core.prefs b/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..0c68a61dc --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,7 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/META-INF/MANIFEST.MF b/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/META-INF/MANIFEST.MF new file mode 100644 index 000000000..9f14c4545 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/META-INF/MANIFEST.MF @@ -0,0 +1,49 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Github +Bundle-SymbolicName: org.eclipse.fx.code.compensator.project.bt.github +Bundle-Version: 1.0.0.qualifier +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Require-Bundle: org.eclipse.fx.code.compensator.project, + org.eclipse.egit.github.core;bundle-version="3.6.0", + com.google.gson;bundle-version="2.1.0", + org.eclipse.fx.core, + org.eclipse.fx.code.compensator.model;bundle-version="0.1.0" +Export-Package: org.eclipse.fx.code.compensator.project.bt.github +Import-Package: javafx.animation;version="2.2.0", + javafx.application;version="2.2.0", + javafx.beans;version="2.2.0", + javafx.beans.binding;version="2.2.0", + javafx.beans.property;version="2.2.0", + javafx.beans.property.adapter;version="2.2.0", + javafx.beans.value;version="2.2.0", + javafx.collections;version="2.2.0", + javafx.collections.transformation;version="8.0.0", + javafx.concurrent;version="2.2.0", + javafx.css;version="8.0.0", + javafx.embed.swing;version="2.2.0", + javafx.embed.swt;version="2.2.0", + javafx.event;version="2.2.0", + javafx.fxml;version="2.2.0", + javafx.geometry;version="2.2.0", + javafx.print;version="8.0.0", + javafx.scene;version="2.2.0", + javafx.scene.canvas;version="2.2.0", + javafx.scene.chart;version="2.2.0", + javafx.scene.control;version="2.2.0", + javafx.scene.control.cell;version="2.2.0", + javafx.scene.effect;version="2.2.0", + javafx.scene.image;version="2.2.0", + javafx.scene.input;version="2.2.0", + javafx.scene.layout;version="2.2.0", + javafx.scene.media;version="2.2.0", + javafx.scene.paint;version="2.2.0", + javafx.scene.shape;version="2.2.0", + javafx.scene.text;version="2.2.0", + javafx.scene.transform;version="2.2.0", + javafx.scene.web;version="2.2.0", + javafx.stage;version="2.2.0", + javafx.util;version="2.2.0", + javafx.util.converter;version="2.2.0" +Service-Component: OSGI-INF/services/githubtracker.xml +Bundle-ActivationPolicy: lazy diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/OSGI-INF/services/githubtracker.xml b/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/OSGI-INF/services/githubtracker.xml new file mode 100644 index 000000000..5892f824e --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/OSGI-INF/services/githubtracker.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.fx.code.compensator.project.bt.github.githubtracker"> + <implementation class="org.eclipse.fx.code.compensator.project.bt.github.GithubBugTrackerService"/> + <service> + <provide interface="org.eclipse.fx.code.compensator.project.bt.BugTrackerService"/> + </service> +</scr:component> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/build.properties b/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/build.properties new file mode 100644 index 000000000..a8d3f814f --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/build.properties @@ -0,0 +1,5 @@ +output.. = bin/ +bin.includes = META-INF/,\ + .,\ + OSGI-INF/services/githubtracker.xml +source.. = src/ diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/css/icons/16/fileFolderType_filter.png b/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/css/icons/16/fileFolderType_filter.png Binary files differnew file mode 100644 index 000000000..48d8c3e17 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/css/icons/16/fileFolderType_filter.png diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/css/icons/16/script-error.png b/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/css/icons/16/script-error.png Binary files differnew file mode 100644 index 000000000..44c7ae1ed --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/css/icons/16/script-error.png diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/src/org/eclipse/fx/code/compensator/project/bt/github/GitHubBucktrackerInstance.java b/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/src/org/eclipse/fx/code/compensator/project/bt/github/GitHubBucktrackerInstance.java new file mode 100644 index 000000000..45088dfb0 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/src/org/eclipse/fx/code/compensator/project/bt/github/GitHubBucktrackerInstance.java @@ -0,0 +1,131 @@ +package org.eclipse.fx.code.compensator.project.bt.github; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; + +import javafx.application.Platform; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + +import org.eclipse.egit.github.core.Issue; +import org.eclipse.egit.github.core.Repository; +import org.eclipse.egit.github.core.client.GitHubClient; +import org.eclipse.egit.github.core.service.IssueService; +import org.eclipse.egit.github.core.service.RepositoryService; +import org.eclipse.fx.code.compensator.project.bt.BugTrackerInstance; +import org.eclipse.fx.code.compensator.project.bt.BugTrackerService; +import org.eclipse.fx.core.function.ExExecutor; + + +public class GitHubBucktrackerInstance implements BugTrackerInstance { + + private static CommitAction CLOSE = new DefaultAction("Close", "Closes #${id}"); + private static CommitAction FIXES = new DefaultAction("Fixes", "Fixes #${id}"); + private static CommitAction COMMIT_FOR = new DefaultAction("Commit For", "commit for #${id}"); + + private static final IssueState OPEN_STATE = new DefaultIssueState("Open", null); + private static final IssueState CLOSE_STATE = new DefaultIssueState("Close", null); + + private Repository repository; + private ObservableList<BugTrackerIssue> issueList = FXCollections.observableArrayList(); + private final GitHubClient client; + private final String repoOwner; + private final String repoName; + private final GithubBugTrackerService service; + + public GitHubBucktrackerInstance(GithubBugTrackerService service, String hostname, String username, String password, String repoOwner, String repoName) { + this.service = service; + this.repoOwner = repoOwner; + this.repoName = repoName; + + client = new GitHubClient(hostname); + client.setCredentials(username, password); + + getOpenIssues().thenAccept(l -> { + List<GitHubBugtrackerIssue> list = l.stream().map(GitHubBugtrackerIssue::new).collect(Collectors.toList()); + Platform.runLater(() -> issueList.setAll(list)); + }); + } + + @Override + public BugTrackerService getService() { + return service; + } + + private CompletableFuture<Repository> getRepository() { + if( repository == null ) { + RepositoryService repoService = new RepositoryService(client); + return CompletableFuture.supplyAsync(() -> { + Repository repo = ExExecutor.executeSupplier(() -> repoService.getRepository(repoOwner, repoName), "").get(); + this.repository = repo; + return repo; + }); + } + return CompletableFuture.completedFuture(repository); + } + + private CompletableFuture<List<Issue>> getOpenIssues() { + return getRepository().handleAsync((r,t) -> { + try { + IssueService service = new IssueService(client); + List<Issue> list = service.getIssues(r, Collections.singletonMap(IssueService.FILTER_STATE, IssueService.STATE_OPEN)); + System.err.println(list); + return list; + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + } + + @Override + public List<CommitAction> getCommitActions() { + return Arrays.asList(COMMIT_FOR,CLOSE,FIXES); + } + + @Override + public ObservableList<BugTrackerIssue> getIssues() { + return issueList; + } + + public CharSequence getLabel() { + return repoName + "@" + repoOwner; + } + + static class GitHubBugtrackerIssue implements BugTrackerIssue { + private final Issue issue; + private ObservableList<BugFollowUp> followUp = FXCollections.observableArrayList(); + + public GitHubBugtrackerIssue(Issue issue) { + this.issue = issue; + } + + @Override + public String getId() { + return this.issue.getNumber() + ""; + } + + @Override + public String getTitle() { + return issue.getTitle(); + } + + @Override + public String getDescription() { + return issue.getBodyText(); + } + + @Override + public IssueState getState() { + return IssueService.STATE_CLOSED.equals(issue.getState()) ? CLOSE_STATE : OPEN_STATE; + } + + @Override + public ObservableList<BugFollowUp> getFollowUpList() { + return followUp; + } + + } +} diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/src/org/eclipse/fx/code/compensator/project/bt/github/GithubBugTrackerRootItem.java b/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/src/org/eclipse/fx/code/compensator/project/bt/github/GithubBugTrackerRootItem.java new file mode 100644 index 000000000..512168827 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/src/org/eclipse/fx/code/compensator/project/bt/github/GithubBugTrackerRootItem.java @@ -0,0 +1,130 @@ +package org.eclipse.fx.code.compensator.project.bt.github; + +import java.util.stream.Collectors; + +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.collections.ListChangeListener.Change; + +import org.eclipse.fx.code.compensator.project.ProjectNavigatorItem; +import org.eclipse.fx.code.compensator.project.bt.BugTrackerInstance.BugTrackerIssue; +import org.eclipse.fx.code.compensator.project.bt.BugTrackerRootNavigatorItem; +import org.eclipse.fx.core.URI; + +public class GithubBugTrackerRootItem implements BugTrackerRootNavigatorItem { + private final ProjectNavigatorItem parent; + private final GitHubBucktrackerInstance instance; + private final ObservableList<ProjectNavigatorItem> openIssues = FXCollections.observableArrayList(); + + public GithubBugTrackerRootItem(ProjectNavigatorItem parent, GitHubBucktrackerInstance instance) { + this.parent = parent; + this.instance = instance; + this.instance.getIssues().addListener(this::handleOpenIssuesChange); + } + + private void handleOpenIssuesChange(Change<? extends BugTrackerIssue> change) { + while( change.next() ) { + if( change.getAddedSize() > 0 ) { + openIssues.addAll(change.getFrom(), change.getAddedSubList().stream().map( b -> new BugTrackerItem(this, b)).collect(Collectors.toList())); + } + if( change.getRemovedSize() > 0 ) { + openIssues.removeIf( e -> change.getRemoved().contains(e.getDomainObject()) ); + } + } + } + + @Override + public CharSequence getLabel() { + return instance.getLabel(); + } + + @Override + public URI getIcon() { + return URI.createPlatformPluginURI("org.eclipse.fx.code.compensator.project.bt.github", "css/icons/16/fileFolderType_filter.png"); + } + + @Override + public Object getDomainObject() { + // TODO Auto-generated method stub + return null; + } + + @Override + public String getOpenCommandId() { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean isDeletable() { + return false; + } + + @Override + public ObservableList<ProjectNavigatorItem> getChildren() { + return openIssues; + } + + @Override + public boolean isLeaf() { + return false; + } + + @Override + public ProjectNavigatorItem getParent() { + return this.parent; + } + + static class BugTrackerItem implements ProjectNavigatorItem { + private final BugTrackerIssue issue; + private final ProjectNavigatorItem parent; + + public BugTrackerItem(ProjectNavigatorItem parent, BugTrackerIssue issue) { + this.issue = issue; + this.parent = parent; + } + + @Override + public CharSequence getLabel() { + return this.issue.getId() + " - " + this.issue.getTitle(); + } + + @Override + public URI getIcon() { + return URI.createPlatformPluginURI("org.eclipse.fx.code.compensator.project.bt.github", "css/icons/16/script-error.png"); + } + + @Override + public Object getDomainObject() { + return this.issue; + } + + @Override + public String getOpenCommandId() { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean isDeletable() { + return false; + } + + @Override + public ObservableList<ProjectNavigatorItem> getChildren() { + return FXCollections.emptyObservableList(); + } + + @Override + public boolean isLeaf() { + return true; + } + + @Override + public ProjectNavigatorItem getParent() { + return parent; + } + + } + +} diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/src/org/eclipse/fx/code/compensator/project/bt/github/GithubBugTrackerService.java b/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/src/org/eclipse/fx/code/compensator/project/bt/github/GithubBugTrackerService.java new file mode 100644 index 000000000..cd79b3e98 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.bt.github/src/org/eclipse/fx/code/compensator/project/bt/github/GithubBugTrackerService.java @@ -0,0 +1,54 @@ +package org.eclipse.fx.code.compensator.project.bt.github; + +import org.eclipse.fx.code.compensator.model.workbench.BugTracker; +import org.eclipse.fx.code.compensator.project.ProjectNavigatorItem; +import org.eclipse.fx.code.compensator.project.bt.BugTrackerInstance; +import org.eclipse.fx.code.compensator.project.bt.BugTrackerRootNavigatorItem; +import org.eclipse.fx.code.compensator.project.bt.BugTrackerService; +import org.eclipse.fx.core.URI; + +public class GithubBugTrackerService implements BugTrackerService { + + @Override + public String getLabel() { + return "Github Issue Tracker"; + } + + @Override + public String getId() { + return "github"; + } + + @Override + public BugTrackerInstance createInstance(BugTracker bugtracker) { + String url = bugtracker.getBugtrackerUrl(); + String username = bugtracker.getBugtrackerUsername(); + String password = bugtracker.getBugtrackerPassword(); + + // url has to be + // https://$host/repos/:owner/:repo/issues + URI uri = URI.create(url); + String hostName = uri.host(); + String repoOwner = uri.segment(1); + String repoName = uri.segment(2); + + return new GitHubBucktrackerInstance(this, hostName, username, password, repoOwner, repoName); + } + + @Override + public BugTrackerRootNavigatorItem mapRepository(ProjectNavigatorItem parent, BugTrackerInstance instance) { + return new GithubBugTrackerRootItem(parent, (GitHubBucktrackerInstance) instance); + } + + public static void main(String[] args) { + URI uri = URI.create("https://api.github.com/repos/tomsontom/compensator-samples/issues"); + System.err.println(uri.host()); + + org.eclipse.emf.common.util.URI uri2 = org.eclipse.emf.common.util.URI.createURI("https://api.github.com/repos/tomsontom/compensator-samples/issues"); + System.err.println(uri2.host()); + + org.eclipse.emf.common.util.URI uri3 = org.eclipse.emf.common.util.URI.createURI("file:/tmp/file.txt"); + System.err.println(uri3.host()); + + } +} diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.ci.travis/.classpath b/experimental/compensator/org.eclipse.fx.code.compensator.project.ci.travis/.classpath new file mode 100644 index 000000000..412fc488f --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.ci.travis/.classpath @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry exported="true" kind="lib" path="lib/org.eclipse.fx.travisci.client-0.0.1-SNAPSHOT.jar"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> + <classpathentry kind="src" path="src"/> + <classpathentry kind="output" path="bin"/> +</classpath> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.ci.travis/.gitignore b/experimental/compensator/org.eclipse.fx.code.compensator.project.ci.travis/.gitignore new file mode 100644 index 000000000..ae3c17260 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.ci.travis/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.ci.travis/.project b/experimental/compensator/org.eclipse.fx.code.compensator.project.ci.travis/.project new file mode 100644 index 000000000..0e86d1a05 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.ci.travis/.project @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>org.eclipse.fx.code.compensator.project.ci.travis</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.ManifestBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.SchemaBuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.pde.PluginNature</nature> + <nature>org.eclipse.jdt.core.javanature</nature> + </natures> +</projectDescription> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.ci.travis/.settings/org.eclipse.jdt.core.prefs b/experimental/compensator/org.eclipse.fx.code.compensator.project.ci.travis/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..0c68a61dc --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.ci.travis/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,7 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.ci.travis/META-INF/MANIFEST.MF b/experimental/compensator/org.eclipse.fx.code.compensator.project.ci.travis/META-INF/MANIFEST.MF new file mode 100644 index 000000000..2931f705c --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.ci.travis/META-INF/MANIFEST.MF @@ -0,0 +1,9 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Travis +Bundle-SymbolicName: org.eclipse.fx.code.compensator.project.ci.travis +Bundle-Version: 1.0.0.qualifier +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-ClassPath: lib/org.eclipse.fx.travisci.client-0.0.1-SNAPSHOT.jar, + . +Require-Bundle: org.eclipse.fx.code.compensator.project diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.ci.travis/build.properties b/experimental/compensator/org.eclipse.fx.code.compensator.project.ci.travis/build.properties new file mode 100644 index 000000000..8e834a3a4 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.ci.travis/build.properties @@ -0,0 +1,5 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + .,\ + lib/org.eclipse.fx.travisci.client-0.0.1-SNAPSHOT.jar diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.ci.travis/lib/org.eclipse.fx.travisci.client-0.0.1-SNAPSHOT.jar b/experimental/compensator/org.eclipse.fx.code.compensator.project.ci.travis/lib/org.eclipse.fx.travisci.client-0.0.1-SNAPSHOT.jar Binary files differnew file mode 100644 index 000000000..42ede2f6b --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.ci.travis/lib/org.eclipse.fx.travisci.client-0.0.1-SNAPSHOT.jar diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.ci.travis/src/org/eclipse/fx/code/compensator/project/ci/travis/TravisCIService.java b/experimental/compensator/org.eclipse.fx.code.compensator.project.ci.travis/src/org/eclipse/fx/code/compensator/project/ci/travis/TravisCIService.java new file mode 100644 index 000000000..50e878962 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.ci.travis/src/org/eclipse/fx/code/compensator/project/ci/travis/TravisCIService.java @@ -0,0 +1,7 @@ +package org.eclipse.fx.code.compensator.project.ci.travis; + +import org.eclipse.fx.code.compensator.project.ci.CIService; + +public class TravisCIService implements CIService { + +} diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/.classpath b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/.classpath index eca7bdba8..0805795ce 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/.classpath +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/.classpath @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> + <classpathentry kind="src" path="xtend-gen"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/META-INF/MANIFEST.MF b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/META-INF/MANIFEST.MF index f59f357de..ee85fd635 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/META-INF/MANIFEST.MF +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/META-INF/MANIFEST.MF @@ -1,28 +1,36 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Jdt -Bundle-SymbolicName: org.eclipse.fx.code.compensator.project.jdt -Bundle-Version: 1.0.0.qualifier -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Require-Bundle: org.eclipse.fx.code.compensator.project, - org.eclipse.fx.code.compensator.model, - org.eclipse.fx.core.di, - org.eclipse.fx.ui.services, - org.eclipse.fx.core, - org.eclipse.e4.core.contexts, - org.eclipse.e4.ui.model.workbench, - org.eclipse.e4.core.di, - org.eclipse.fx.code.server.jdt;bundle-version="1.0.0", - org.eclipse.fx.code.compensator.editor, - org.eclipse.fx.text, - org.eclipse.e4.ui.workbench, - org.eclipse.fx.code.server.jdt.shared;bundle-version="1.0.0", - org.eclipse.fx.ui.controls, - org.eclipse.e4.core.services, - org.eclipse.osgi.services, - org.eclipse.fx.text.ui;bundle-version="1.0.0" -Service-Component: OSGI-INF/services/jdtproject.xml,OSGI-INF/services/jdtstylesheet.xml,OSGI-INF/services/serverfunction.xml,OSGI-INF/services/jdtserverinputfactory.xml,OSGI-INF/services/jdtDocumentfactory.xml,OSGI-INF/services/jdtproposalcomputer.xml,OSGI-INF/services/jdtannotationfactory.xml, - OSGI-INF/services/jdtannotationpresenter.xml -Bundle-ActivationPolicy: lazy -Import-Package: javax.inject;version="1.0.0", - org.eclipse.jface.text.contentassist +Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Jdt
+Bundle-SymbolicName: org.eclipse.fx.code.compensator.project.jdt;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Require-Bundle: org.eclipse.fx.code.compensator.project,
+ org.eclipse.fx.code.compensator.model,
+ org.eclipse.fx.core.di,
+ org.eclipse.fx.ui.services,
+ org.eclipse.fx.core,
+ org.eclipse.e4.core.contexts,
+ org.eclipse.e4.ui.model.workbench,
+ org.eclipse.e4.core.di,
+ org.eclipse.fx.code.server.jdt;bundle-version="1.0.0",
+ org.eclipse.fx.code.compensator.editor,
+ org.eclipse.fx.text,
+ org.eclipse.e4.ui.workbench,
+ org.eclipse.fx.code.server.jdt.shared;bundle-version="1.0.0",
+ org.eclipse.fx.ui.controls,
+ org.eclipse.e4.core.services,
+ org.eclipse.osgi.services,
+ org.eclipse.fx.text.ui;bundle-version="1.0.0",
+ org.eclipse.fx.ui.panes,
+ org.eclipse.fx.ui.di,
+ org.eclipse.jdt.annotation;bundle-version="2.0.100";resolution:=optional,
+ org.eclipse.fx.ui.dialogs,
+ com.google.guava,
+ org.eclipse.xtext.xbase.lib,
+ org.eclipse.xtend.lib,
+ org.eclipse.xtend.lib.macro
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Import-Package: javax.inject;version="1.0.0",
+ org.eclipse.jface.text.contentassist
+Bundle-ActivationPolicy: lazy
+Service-Component: OSGI-INF/services/jdtproject.xml,OSGI-INF/services/jdtstylesheet.xml,OSGI-INF/services/serverfunction.xml,OSGI-INF/services/jdtserverinputfactory.xml,OSGI-INF/services/jdtDocumentfactory.xml,OSGI-INF/services/jdtproposalcomputer.xml,OSGI-INF/services/jdtannotationfactory.xml,OSGI-INF/services/jdtannotationpresenter.xml
+
diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/build.properties b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/build.properties index 4ee0442d8..60e29adaa 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/build.properties +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/build.properties @@ -8,5 +8,7 @@ bin.includes = META-INF/,\ OSGI-INF/services/jdtDocumentfactory.xml,\ OSGI-INF/services/jdtproposalcomputer.xml,\ OSGI-INF/services/jdtannotationfactory.xml,\ - OSGI-INF/services/jdtannotationpresenter.xml + OSGI-INF/services/jdtannotationpresenter.xml,\ + fragment.e4xmi,\ + plugin.xml source.. = src/ diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/css/dark.css b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/css/dark.css index fb5b7cf9f..a1aed40a0 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/css/dark.css +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/css/dark.css @@ -32,4 +32,8 @@ /*.list-cell >*/ .styled-label.java-project { -fx-graphic: url(icons/16/jperspective.png); +} + +.titleDialog_Icon-new-java-class-dialog { + -fx-image: url(icons/64/newclass_wiz.png); }
\ No newline at end of file diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/css/default.css b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/css/default.css index fb5b7cf9f..a1aed40a0 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/css/default.css +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/css/default.css @@ -32,4 +32,8 @@ /*.list-cell >*/ .styled-label.java-project { -fx-graphic: url(icons/16/jperspective.png); +} + +.titleDialog_Icon-new-java-class-dialog { + -fx-image: url(icons/64/newclass_wiz.png); }
\ No newline at end of file diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/css/icons/64/newclass_wiz.png b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/css/icons/64/newclass_wiz.png Binary files differnew file mode 100644 index 000000000..971d63960 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/css/icons/64/newclass_wiz.png diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/fragment.e4xmi b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/fragment.e4xmi new file mode 100644 index 000000000..9a8a2df4e --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/fragment.e4xmi @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="ASCII"?> +<fragment:ModelFragments xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:commands="http://www.eclipse.org/ui/2010/UIModel/application/commands" xmlns:fragment="http://www.eclipse.org/ui/2010/UIModel/fragment" xmi:id="_eZlGYLIwEeSfe79Bewi7bA"> + <fragments xsi:type="fragment:StringModelFragment" xmi:id="_fem0wLIwEeSfe79Bewi7bA" featurename="commands" parentElementId="org.eclipse.fx.code.compensator.app"> + <elements xsi:type="commands:Command" xmi:id="_oldrkLIwEeSfe79Bewi7bA" elementId="org.eclipse.fx.code.compensator.project.jdt.command.newclass" commandName="New Class"/> + <elements xsi:type="commands:Command" xmi:id="_V9vlMLXjEeS-EfBcv9o4bw" elementId="org.eclipse.fx.code.compensator.project.jdt.command.serverfile" commandName="Open Server Managed File"> + <parameters xmi:id="_et6aULXjEeS-EfBcv9o4bw" elementId="projectid" name="Project Id" optional="false"/> + <parameters xmi:id="_ixOewLXjEeS-EfBcv9o4bw" elementId="moduleName" name="Module Name" optional="false"/> + <parameters xmi:id="_lE_4MLXjEeS-EfBcv9o4bw" elementId="modulePath" name="Modul Path" optional="false"/> + </elements> + </fragments> + <fragments xsi:type="fragment:StringModelFragment" xmi:id="_lr0k8LIwEeSfe79Bewi7bA" featurename="handlers" parentElementId="org.eclipse.fx.code.compensator.app"> + <elements xsi:type="commands:Handler" xmi:id="_vgN3MLIwEeSfe79Bewi7bA" elementId="org.eclipse.fx.code.compensator.project.jdt.handler.0" contributionURI="bundleclass://org.eclipse.fx.code.compensator.project.jdt/org.eclipse.fx.code.compensator.project.jdt.handler.NewClassAction" command="_oldrkLIwEeSfe79Bewi7bA"/> + <elements xsi:type="commands:Handler" xmi:id="_bSZVsLXjEeS-EfBcv9o4bw" elementId="org.eclipse.fx.code.compensator.project.jdt.handler.1" contributionURI="bundleclass://org.eclipse.fx.code.compensator.project.jdt/org.eclipse.fx.code.compensator.project.jdt.handler.OpenServerManagedFile" command="_V9vlMLXjEeS-EfBcv9o4bw"/> + </fragments> +</fragment:ModelFragments> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/plugin.xml b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/plugin.xml new file mode 100644 index 000000000..d185729bb --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/plugin.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<plugin> + + <extension + id="org.eclipse.fx.code.compensator.project.jdt.fragment" + point="org.eclipse.e4.workbench.model"> + <fragment + apply="always" + uri="fragment.e4xmi"> + </fragment> + </extension> + +</plugin> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/JDTProjectService.java b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/JDTProjectService.java index ee33a8939..05d029b39 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/JDTProjectService.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/JDTProjectService.java @@ -27,7 +27,6 @@ import org.eclipse.fx.code.compensator.project.jdt.tb.NewPackageElement; import org.eclipse.fx.code.compensator.project.jdt.tb.RunElement; import org.eclipse.fx.code.compensator.project.navigator.FolderItem; import org.eclipse.fx.code.compensator.project.navigator.ModuleContainerItem; -import org.eclipse.fx.core.SimpleURI; import org.eclipse.fx.core.URI; public class JDTProjectService implements ProjectService { @@ -68,7 +67,7 @@ public class JDTProjectService implements ProjectService { @Override public URI getIconUri() { - return new SimpleURI(getClass().getClassLoader().getResource("css/icons/16/jperspective.png").toExternalForm()); + return URI.create(getClass().getClassLoader().getResource("css/icons/16/jperspective.png").toExternalForm()); } @Override diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/handler/NewClassAction.java b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/handler/NewClassAction.java new file mode 100644 index 000000000..64b7794d6 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/handler/NewClassAction.java @@ -0,0 +1,94 @@ +package org.eclipse.fx.code.compensator.project.jdt.handler; + +import static org.eclipse.fx.core.function.ExExecutor.executeSupplier; + +import java.nio.ByteBuffer; +import java.nio.file.Path; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ExecutionException; + +import javafx.scene.Node; +import javafx.scene.layout.StackPane; +import javafx.stage.Stage; + +import javax.inject.Named; + +import org.eclipse.e4.core.di.annotations.Execute; +import org.eclipse.e4.core.services.events.IEventBroker; +import org.eclipse.fx.code.compensator.project.Constants; +import org.eclipse.fx.code.compensator.project.InstanceProject; +import org.eclipse.fx.code.compensator.project.ProjectNavigatorItem; +import org.eclipse.fx.code.compensator.project.jdt.internal.JDTPackageFragmentRootItem; +import org.eclipse.fx.code.compensator.project.jdt.internal.JDTPathItem; +import org.eclipse.fx.core.command.CommandService; +import org.eclipse.fx.ui.controls.stage.DefaultWindowPane; +import org.eclipse.fx.ui.di.FXMLBuilder; +import org.eclipse.fx.ui.di.FXMLBuilder.Data; +import org.eclipse.fx.ui.di.FXMLLoader; +import org.eclipse.fx.ui.di.FXMLLoaderFactory; +import org.eclipse.fx.ui.dialogs.TitleAreaDialog; + +public class NewClassAction { + @Execute + public void createNewClass(InstanceProject project, @Named("navigatorSelection") JDTPathItem navigationItem, + @FXMLLoader FXMLLoaderFactory factory, Stage stage, IEventBroker broker, + CommandService commandService) { + FXMLBuilder<Node> builder = factory.loadRequestorRelative("NewClassPane.fxml"); + Data<Node, NewClassPaneController> data = executeSupplier( + () -> builder.<NewClassPaneController> loadWithController(), "Failed to load FXML file").get(); + TitleAreaDialog dialog = new TitleAreaDialog(stage,"New Class","New Class","Create a new class","new-java-class-dialog") { + + @Override + protected Node createDialogContent() { + return data.getNode(); + } + + protected org.eclipse.fx.ui.controls.stage.WindowPane getCustomWindowPane() { + return new DefaultWindowPane(new StackPane()); + } + }; + if( dialog.open() == TitleAreaDialog.OK_BUTTON ) { + String packageName = data.getController().getPackageName(); + String className = data.getController().getClassName(); + + ProjectNavigatorItem i = navigationItem; + while( i != null ) { + if( i instanceof JDTPackageFragmentRootItem ) { + break; + } + i = i.getParent(); + } + + String path = ((JDTPackageFragmentRootItem)i).getLabel().toString(); + path += "/" + packageName.replace('.', '/'); + path += "/" + className + ".java"; + +// System.err.println("CREATING: " + path); + + try { + Path p = navigationItem.getModuleItem().getPath().resolve(path); + Boolean rv = navigationItem.getJdtProject().getProjectServer().createFile(navigationItem.getModuleItem().getDomainObject().getName(), path, ByteBuffer.wrap(NewClassTemplate.generate(packageName, className).toString().getBytes())).get(); + if( rv.booleanValue() ) { + broker.post(Constants.TOPIC_NEW_FILE, p); + } + Map<String, Object> map = new HashMap<>(); + map.put("projectid", project.getProject().getProjectId()); + map.put("moduleName", navigationItem.getModuleItem().getDomainObject().getName()); + map.put("modulePath", path); + commandService.execute("org.eclipse.fx.code.compensator.project.jdt.command.serverfile", map); + } catch (InterruptedException | ExecutionException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + +// Dialog<ButtonType> dialog = new Dialog<>(); +// dialog.initOwner(stage); +// dialog.getDialogPane().getStyleClass().add("new-java-class-dialog"); +// dialog.getDialogPane().setHeaderText("New Class"); +// dialog.getDialogPane().getButtonTypes().addAll(ButtonType.OK,ButtonType.CANCEL); +// dialog.getDialogPane().setContent(data.getNode()); +// dialog.showAndWait().ifPresent(this::handleDialogResult); + } +} diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/handler/NewClassPane.fxgraph b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/handler/NewClassPane.fxgraph new file mode 100644 index 000000000..9bc207bd0 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/handler/NewClassPane.fxgraph @@ -0,0 +1,80 @@ +package org.eclipse.fx.code.compensator.project.jdt.handler + +import org.eclipse.fx.ui.panes.GridLayoutPane +import javafx.scene.control.Label +import javafx.scene.control.TextField +import org.eclipse.fx.ui.panes.GridData +import javafx.scene.control.Button +import javafx.scene.control.CheckBox +import javafx.scene.control.RadioButton +import javafx.scene.control.ToggleGroup +import org.eclipse.fx.code.compensator.project.jdt.handler.NewClassPaneController + +component NewClassPane controlledby NewClassPaneController { + define ToggleGroup id visibilityMods + GridLayoutPane { + numColumns : 3, + children : [ + Label { + text : "Package" + }, + TextField id packageField { + static constraint : GridData { + grabExcessHorizontalSpace : true, + horizontalAlignment : "FILL" + } + }, + Button { + text : "Browse ..." + }, + // ---------- + Label { + text : "Name" + }, + TextField id className { + static constraint : GridData { + grabExcessHorizontalSpace : true, + horizontalAlignment : "FILL" + } + }, + Label, + // ---------- + Label { + text : "Modifier" + }, + GridLayoutPane { + numColumns : 3, + children : [ + RadioButton id publicModifier { + text : "public", + selected : true, + toggleGroup : idref visibilityMods + }, + RadioButton id packageModifier { + text : "package", + toggleGroup : idref visibilityMods + }, + RadioButton id protectedModifier { + text : "protected", + toggleGroup : idref visibilityMods + } + ] + }, + Label, + // ---------- + Label, + GridLayoutPane { + numColumns : 4, + children : [ + CheckBox id abstractModifier { + text : "abstract" + }, + CheckBox id finalModifier { + text : "final" + } + ] + }, + Label + ] + } +} diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/handler/NewClassPane.fxml b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/handler/NewClassPane.fxml new file mode 100644 index 000000000..7401e7d9f --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/handler/NewClassPane.fxml @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Do not edit this file it is generated by e(fx)clipse from ../src/org/eclipse/fx/code/compensator/project/jdt/handler/NewClassPane.fxgraph
+-->
+
+<?import java.lang.*?>
+<?import javafx.scene.control.Button?>
+<?import javafx.scene.control.CheckBox?>
+<?import javafx.scene.control.Label?>
+<?import javafx.scene.control.RadioButton?>
+<?import javafx.scene.control.TextField?>
+<?import javafx.scene.control.ToggleGroup?>
+<?import org.eclipse.fx.ui.panes.GridData?>
+<?import org.eclipse.fx.ui.panes.GridLayoutPane?>
+
+<GridLayoutPane xmlns:fx="http://javafx.com/fxml" fx:controller="org.eclipse.fx.code.compensator.project.jdt.handler.NewClassPaneController" numColumns="3">
+ <fx:define>
+ <ToggleGroup fx:id="visibilityMods"/>
+ </fx:define>
+
+ <children>
+ <Label text="Package"/>
+ <TextField fx:id="packageField">
+ <GridLayoutPane.constraint>
+ <GridData grabExcessHorizontalSpace="true" horizontalAlignment="FILL"/>
+ </GridLayoutPane.constraint>
+ </TextField>
+ <Button text="Browse ..."/>
+ <Label text="Name"/>
+ <TextField fx:id="className">
+ <GridLayoutPane.constraint>
+ <GridData grabExcessHorizontalSpace="true" horizontalAlignment="FILL"/>
+ </GridLayoutPane.constraint>
+ </TextField>
+ <Label/>
+ <Label text="Modifier"/>
+ <GridLayoutPane numColumns="3">
+ <children>
+ <RadioButton fx:id="publicModifier" text="public" selected="true" toggleGroup="$visibilityMods"/>
+ <RadioButton fx:id="packageModifier" text="package" toggleGroup="$visibilityMods"/>
+ <RadioButton fx:id="protectedModifier" text="protected" toggleGroup="$visibilityMods"/>
+ </children>
+ </GridLayoutPane>
+ <Label/>
+ <Label/>
+ <GridLayoutPane numColumns="4">
+ <children>
+ <CheckBox fx:id="abstractModifier" text="abstract"/>
+ <CheckBox fx:id="finalModifier" text="final"/>
+ </children>
+ </GridLayoutPane>
+ <Label/>
+ </children>
+</GridLayoutPane>
diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/handler/NewClassPaneController.java b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/handler/NewClassPaneController.java new file mode 100644 index 000000000..486d7bf10 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/handler/NewClassPaneController.java @@ -0,0 +1,58 @@ +package org.eclipse.fx.code.compensator.project.jdt.handler; + +import java.net.URL; +import java.util.ResourceBundle; + +import javax.inject.Inject; +import javax.inject.Named; + +import org.eclipse.fx.code.compensator.project.ProjectNavigatorItem; +import org.eclipse.fx.code.compensator.project.jdt.internal.JDTPackageItem; + +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.control.TextField; +import javafx.scene.control.RadioButton; +import javafx.scene.control.CheckBox; + +public class NewClassPaneController implements Initializable { + + @FXML TextField packageField; + @FXML TextField className; + @FXML RadioButton publicModifier; + @FXML RadioButton packageModifier; + @FXML RadioButton protectedModifier; + @FXML CheckBox abstractModifier; + @FXML CheckBox finalModifier; + + private final ProjectNavigatorItem navigationItem; + + @Inject + public NewClassPaneController(@Named("navigatorSelection") ProjectNavigatorItem navigationItem) { + this.navigationItem = navigationItem; + } + + @Override + public void initialize(URL location, ResourceBundle resources) { + if( navigationItem instanceof JDTPackageItem ) { + StringBuilder b = new StringBuilder(); + JDTPackageItem i = (JDTPackageItem) navigationItem; + b.append(i.getLabel()); + + while( i.getParent() instanceof JDTPackageItem ) { + i = (JDTPackageItem) i.getParent(); + b.insert(0, i.getLabel() + "."); + } + + packageField.setText(b.toString()); + } + } + + public String getPackageName() { + return packageField.getText(); + } + + public String getClassName() { + return className.getText(); + } +} diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/handler/NewClassTemplate.xtend b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/handler/NewClassTemplate.xtend new file mode 100644 index 000000000..58d824cd3 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/handler/NewClassTemplate.xtend @@ -0,0 +1,11 @@ +package org.eclipse.fx.code.compensator.project.jdt.handler + +class NewClassTemplate { + def static generate(String packagename, String className) ''' + package «packagename»; + + public class «className» { + + } + ''' +}
\ No newline at end of file diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/handler/OpenServerManagedFile.java b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/handler/OpenServerManagedFile.java new file mode 100644 index 000000000..333ba157b --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/handler/OpenServerManagedFile.java @@ -0,0 +1,60 @@ +package org.eclipse.fx.code.compensator.project.jdt.handler; + +import javax.inject.Named; + +import org.eclipse.e4.core.di.annotations.Execute; +import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective; +import org.eclipse.e4.ui.model.application.ui.basic.MPart; +import org.eclipse.e4.ui.model.application.ui.basic.MPartStack; +import org.eclipse.e4.ui.model.application.ui.basic.MStackElement; +import org.eclipse.e4.ui.workbench.modeling.EModelService; +import org.eclipse.e4.ui.workbench.modeling.EPartService; +import org.eclipse.e4.ui.workbench.modeling.EPartService.PartState; +import org.eclipse.emf.common.util.URI; +import org.eclipse.fx.code.compensator.editor.TextEditor; +import org.eclipse.fx.code.compensator.editor.services.FileIconLookup; +import org.eclipse.fx.code.compensator.model.workbench.Module; +import org.eclipse.fx.code.compensator.model.workbench.Project; + +public class OpenServerManagedFile { + @Execute + public void open( + Project project, + EModelService modelService, + EPartService partService, + MPerspective perspective, + FileIconLookup fileLookup, + @Named("projectid") String projectId, + @Named("moduleName") String modulename, + @Named("modulePath") String modulePath) { + System.err.println("RUNNING"); + MPartStack element = (MPartStack) modelService.find("org.eclipse.fx.code.compensator.project.partstack.1", perspective); + + String url = "jdt:/"+projectId+"/"+modulename+"/"+modulePath; + + for( MStackElement p : element.getChildren() ) { + if( url.equals(p.getPersistedState().get(TextEditor.DOCUMENT_URL)) ) { + partService.showPart((MPart)p, PartState.ACTIVATE); + } + } + + String moduleRoot = null; + for( Module m : project.getModuleList() ) { + if( m.getName().equals(modulename) ) { + moduleRoot = m.getRootFolderUrl(); + } + } + + MPart p = modelService.createModelElement(MPart.class); + p.setContributionURI("bundleclass://org.eclipse.fx.code.compensator.editor/org.eclipse.fx.code.compensator.editor.TextEditor"); + p.getPersistedState().put(TextEditor.DOCUMENT_URL, url); + p.getPersistedState().put(TextEditor.VCS_URL, moduleRoot + "/" + modulePath); + + p.setLabel(URI.createURI(url).lastSegment()); + p.setIconURI(fileLookup.getFileIcon(url).toString()); + p.setCloseable(true); + p.getTags().add(EPartService.REMOVE_ON_HIDE_TAG); + element.getChildren().add(p); + partService.showPart(p, PartState.ACTIVATE); + } +} diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/internal/JDTInstanceProject.java b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/internal/JDTInstanceProject.java index bc98bfd9e..2898d0b7e 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/internal/JDTInstanceProject.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/internal/JDTInstanceProject.java @@ -23,6 +23,7 @@ import org.eclipse.fx.code.compensator.model.workbench.Project; import org.eclipse.fx.code.compensator.model.workbench.VCSRepository; import org.eclipse.fx.code.compensator.project.InstanceProject; import org.eclipse.fx.code.compensator.project.ProjectNavigatorItem; +import org.eclipse.fx.code.compensator.project.bt.BugTrackerService; import org.eclipse.fx.code.compensator.project.vcs.VersionControlService; import org.eclipse.fx.code.server.jdt.JDTServer; import org.eclipse.fx.core.di.Service; @@ -43,8 +44,9 @@ public class JDTInstanceProject extends InstanceProject { EModelService modelService, MPerspective perspective, FileIconLookup fileLookup, - @Service List<VersionControlService> versionControlService) { - super(eventBroker, project, versionControlService); + @Service List<VersionControlService> versionControlService, + @Service List<BugTrackerService> bugtrackerService) { + super(eventBroker, project, versionControlService, bugtrackerService); this.projectServer = projectServer; this.partService = partService; this.modelService = modelService; @@ -96,5 +98,6 @@ public class JDTInstanceProject extends InstanceProject { return true; } return false; - } + } + }
\ No newline at end of file diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/internal/JDTModuleItem.java b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/internal/JDTModuleItem.java index d27bf93ce..d795da451 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/internal/JDTModuleItem.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/internal/JDTModuleItem.java @@ -13,6 +13,7 @@ import javafx.collections.FXCollections; import javafx.collections.ObservableList; import org.eclipse.fx.code.compensator.model.workbench.Module; +import org.eclipse.fx.code.compensator.project.Constants; import org.eclipse.fx.code.compensator.project.ProjectNavigatorItem; import org.eclipse.fx.code.compensator.project.navigator.FileItem; import org.eclipse.fx.code.compensator.project.navigator.FolderItem; @@ -20,6 +21,7 @@ import org.eclipse.fx.code.compensator.project.navigator.PathItem; import org.eclipse.fx.core.function.ExExecutor; import org.eclipse.fx.core.log.Logger; import org.eclipse.fx.core.log.LoggerCreator; +import org.osgi.service.event.Event; public class JDTModuleItem implements ProjectNavigatorItem, JDTPathItem { private final Module module; @@ -33,8 +35,10 @@ public class JDTModuleItem implements ProjectNavigatorItem, JDTPathItem { this.parent = parent; this.module = module; this.instanceProject = instanceProject; - + this.module.setUserdata(this); + this.path = Paths.get(URI.create(module.getRootFolderUrl())); +// this.instanceProject.getEventBroker().subscribe(Constants.TOPIC_NEW_FILE, this::handleNewFile); } @Override diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/internal/JDTPackageItem.java b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/internal/JDTPackageItem.java index 9416dd187..a7b95f0e8 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/internal/JDTPackageItem.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/internal/JDTPackageItem.java @@ -4,6 +4,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.function.BiFunction; +import org.eclipse.fx.code.compensator.project.Constants; import org.eclipse.fx.code.compensator.project.ProjectNavigatorItem; import org.eclipse.fx.code.compensator.project.navigator.FileItem; import org.eclipse.fx.code.compensator.project.navigator.FolderItem; @@ -22,8 +23,9 @@ public class JDTPackageItem extends FolderItem implements ProjectNavigatorItem, public JDTPackageItem(FolderItem parent, Path p) { super(parent,p,FACTORY); + getJdtProject().getEventBroker().subscribe(Constants.TOPIC_NEW_FILE, e -> refresh()); } - + public URI getIcon() { return URI.createPlatformPluginURI("org.eclipse.fx.code.compensator.project.jdt","css/icons/16/package_obj.png"); } diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/internal/JDTPathItem.java b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/internal/JDTPathItem.java index 47b13dd7b..308c1024d 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/internal/JDTPathItem.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/internal/JDTPathItem.java @@ -1,7 +1,9 @@ package org.eclipse.fx.code.compensator.project.jdt.internal; +import org.eclipse.fx.code.compensator.project.ProjectNavigatorItem; -public interface JDTPathItem { + +public interface JDTPathItem extends ProjectNavigatorItem { public JDTModuleItem getModuleItem(); public JDTInstanceProject getJdtProject(); } diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/internal/JDTServerInput.java b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/internal/JDTServerInput.java index bfb381eb1..1d745122d 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/internal/JDTServerInput.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/internal/JDTServerInput.java @@ -28,7 +28,6 @@ public class JDTServerInput implements Input<String>, ContentTypeProvider, URIPr private VCSRepositoryInstance repositoryInstance; private Path filePath; - @Inject public JDTServerInput(@Named(TextEditor.DOCUMENT_URL) String url, @Named(TextEditor.VCS_URL) String vcsUrl, InstanceProject project, JDTServerFactory factory) { org.eclipse.emf.common.util.URI uri = org.eclipse.emf.common.util.URI.createURI(url); @@ -97,22 +96,7 @@ public class JDTServerInput implements Input<String>, ContentTypeProvider, URIPr String resourceId = this.openFile.get(); Future<ByteBuffer> data = this.server.getFileContent(resourceId); - // Freaking hack because JavaFX can not deal with TABs - String s = new String(data.get().array()); -// BufferedReader reader = new BufferedReader(new StringReader(s)); -// StringBuilder b = new StringBuilder(); -// String line; -// while( (line = reader.readLine()) != null ) { -// //FIXME We need to replace TABs for now -// b.append(line.replaceAll("\t", " ")+"\n"); -// } -// reader.close(); -// -// if( ! s.equals(b.toString()) ) { -// this.server.setFileContent(resourceId, ByteBuffer.wrap(b.toString().getBytes())).get(); -// this.server.persistContent(resourceId); -// } - return s; + return new String(data.get().array()); } catch (InterruptedException | ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/tb/DebugElement.java b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/tb/DebugElement.java index caf677b86..5d8d14d29 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/tb/DebugElement.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/tb/DebugElement.java @@ -5,7 +5,7 @@ import org.eclipse.fx.code.compensator.project.ProjectService.ToolbarElement; public class DebugElement extends ToolbarElement { public DebugElement() { - super("debug-button", "Run Executable in Debugger"); + super("debug-button", "Run Executable in Debugger","org.eclipse.fx.code.compensator.project.jdt.command.debug"); } } diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/tb/NewClassElement.java b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/tb/NewClassElement.java index fcf38d778..9d1991442 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/tb/NewClassElement.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/tb/NewClassElement.java @@ -5,7 +5,6 @@ import org.eclipse.fx.code.compensator.project.ProjectService.ToolbarElement; public class NewClassElement extends ToolbarElement { public NewClassElement() { - super("new-java-class", "Create a new java class"); + super("new-java-class", "Create a new java class","org.eclipse.fx.code.compensator.project.jdt.command.newclass"); } - } diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/tb/NewEnumElement.java b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/tb/NewEnumElement.java index 4bbbe3321..f88acf3e2 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/tb/NewEnumElement.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/tb/NewEnumElement.java @@ -5,7 +5,7 @@ import org.eclipse.fx.code.compensator.project.ProjectService.ToolbarElement; public class NewEnumElement extends ToolbarElement { public NewEnumElement() { - super("new-java-enum", "Create a new enum"); + super("new-java-enum", "Create a new enum","org.eclipse.fx.code.compensator.project.jdt.command.newenum"); } } diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/tb/NewInterfaceElement.java b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/tb/NewInterfaceElement.java index 43fcc5a4d..36d575646 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/tb/NewInterfaceElement.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/tb/NewInterfaceElement.java @@ -5,7 +5,7 @@ import org.eclipse.fx.code.compensator.project.ProjectService.ToolbarElement; public class NewInterfaceElement extends ToolbarElement { public NewInterfaceElement() { - super("new-java-interface", "Create a new interface"); + super("new-java-interface", "Create a new interface","org.eclipse.fx.code.compensator.project.jdt.command.newinterface"); } } diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/tb/NewModuleElement.java b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/tb/NewModuleElement.java index f3933313a..7bcd9ab90 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/tb/NewModuleElement.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/tb/NewModuleElement.java @@ -5,7 +5,7 @@ import org.eclipse.fx.code.compensator.project.ProjectService.ToolbarElement; public class NewModuleElement extends ToolbarElement { public NewModuleElement() { - super("new-java-module", "Create a new module"); + super("new-java-module", "Create a new module","org.eclipse.fx.code.compensator.project.jdt.command.newmodule"); } } diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/tb/NewPackageElement.java b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/tb/NewPackageElement.java index 221000bbc..719ee2f52 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/tb/NewPackageElement.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/tb/NewPackageElement.java @@ -5,7 +5,7 @@ import org.eclipse.fx.code.compensator.project.ProjectService.ToolbarElement; public class NewPackageElement extends ToolbarElement { public NewPackageElement() { - super("new-java-package", "Create a new package"); + super("new-java-package", "Create a new package","org.eclipse.fx.code.compensator.project.jdt.command.newpackage"); } } diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/tb/RunElement.java b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/tb/RunElement.java index 8cc4aef13..ff21056b2 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/tb/RunElement.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/src/org/eclipse/fx/code/compensator/project/jdt/tb/RunElement.java @@ -1,16 +1,10 @@ package org.eclipse.fx.code.compensator.project.jdt.tb; import org.eclipse.fx.code.compensator.project.ProjectService.ToolbarElement; -import org.eclipse.fx.core.di.Invoke; public class RunElement extends ToolbarElement { public RunElement() { - super("run-button", "Run Executable"); - } - - @Invoke - public void runExecutable() { - + super("run-button", "Run Executable","org.eclipse.fx.code.compensator.project.jdt.command.run"); } } diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/xtend-gen/org/eclipse/fx/code/compensator/project/jdt/handler/.NewClassTemplate.xtendbin b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/xtend-gen/org/eclipse/fx/code/compensator/project/jdt/handler/.NewClassTemplate.xtendbin Binary files differnew file mode 100644 index 000000000..aaeefbfe6 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/xtend-gen/org/eclipse/fx/code/compensator/project/jdt/handler/.NewClassTemplate.xtendbin diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/xtend-gen/org/eclipse/fx/code/compensator/project/jdt/handler/.gitignore b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/xtend-gen/org/eclipse/fx/code/compensator/project/jdt/handler/.gitignore new file mode 100644 index 000000000..2a41b18fb --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/xtend-gen/org/eclipse/fx/code/compensator/project/jdt/handler/.gitignore @@ -0,0 +1 @@ +/.NewClassTemplate.java._trace diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/xtend-gen/org/eclipse/fx/code/compensator/project/jdt/handler/NewClassTemplate.java b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/xtend-gen/org/eclipse/fx/code/compensator/project/jdt/handler/NewClassTemplate.java new file mode 100644 index 000000000..edfb97e59 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.jdt/xtend-gen/org/eclipse/fx/code/compensator/project/jdt/handler/NewClassTemplate.java @@ -0,0 +1,24 @@ +package org.eclipse.fx.code.compensator.project.jdt.handler; + +import org.eclipse.xtend2.lib.StringConcatenation; + +@SuppressWarnings("all") +public class NewClassTemplate { + public static CharSequence generate(final String packagename, final String className) { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("package "); + _builder.append(packagename, ""); + _builder.append(";"); + _builder.newLineIfNotEmpty(); + _builder.newLine(); + _builder.append("public class "); + _builder.append(className, ""); + _builder.append(" {"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.newLine(); + _builder.append("}"); + _builder.newLine(); + return _builder; + } +} diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.vcs.git/.project b/experimental/compensator/org.eclipse.fx.code.compensator.project.vcs.git/.project index d4ac39707..9981a0667 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project.vcs.git/.project +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.vcs.git/.project @@ -6,6 +6,11 @@ </projects> <buildSpec> <buildCommand> + <name>org.eclipse.xtext.ui.shared.xtextBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> <name>org.eclipse.jdt.core.javabuilder</name> <arguments> </arguments> @@ -29,5 +34,6 @@ <natures> <nature>org.eclipse.pde.PluginNature</nature> <nature>org.eclipse.jdt.core.javanature</nature> + <nature>org.eclipse.xtext.ui.shared.xtextNature</nature> </natures> </projectDescription> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.vcs.git/META-INF/MANIFEST.MF b/experimental/compensator/org.eclipse.fx.code.compensator.project.vcs.git/META-INF/MANIFEST.MF index ad450f31b..63a88db1d 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project.vcs.git/META-INF/MANIFEST.MF +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.vcs.git/META-INF/MANIFEST.MF @@ -9,6 +9,11 @@ Require-Bundle: org.eclipse.fx.core, org.eclipse.fx.code.compensator.project, org.eclipse.fx.code.compensator.model, com.jcraft.jsch;bundle-version="0.1.51", - org.eclipse.e4.core.services + org.eclipse.e4.core.services, + org.eclipse.fx.ui.panes, + org.eclipse.fx.code.compensator.project.bt.github, + org.eclipse.fx.ui.controls, + org.eclipse.jdt.annotation;bundle-version="2.0.100";resolution:=optional, + org.apache.commons.lang Service-Component: OSGI-INF/services/gitvcs.xml Bundle-ActivationPolicy: lazy diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.vcs.git/src/org/eclipse/fx/code/compensator/project/vcs/git/.gitignore b/experimental/compensator/org.eclipse.fx.code.compensator.project.vcs.git/src/org/eclipse/fx/code/compensator/project/vcs/git/.gitignore new file mode 100644 index 000000000..76d955046 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.vcs.git/src/org/eclipse/fx/code/compensator/project/vcs/git/.gitignore @@ -0,0 +1 @@ +/TestMe.java diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.vcs.git/src/org/eclipse/fx/code/compensator/project/vcs/git/GitCommitDialog.java b/experimental/compensator/org.eclipse.fx.code.compensator.project.vcs.git/src/org/eclipse/fx/code/compensator/project/vcs/git/GitCommitDialog.java new file mode 100644 index 000000000..9f896fc48 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.vcs.git/src/org/eclipse/fx/code/compensator/project/vcs/git/GitCommitDialog.java @@ -0,0 +1,209 @@ +package org.eclipse.fx.code.compensator.project.vcs.git; + +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import javafx.beans.binding.StringBinding; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.geometry.Side; +import javafx.scene.control.Button; +import javafx.scene.control.ButtonBar.ButtonData; +import javafx.scene.control.TabPane.TabClosingPolicy; +import javafx.scene.control.ButtonType; +import javafx.scene.control.CheckBox; +import javafx.scene.control.ComboBox; +import javafx.scene.control.Dialog; +import javafx.scene.control.Label; +import javafx.scene.control.Tab; +import javafx.scene.control.TabPane; +import javafx.scene.control.TextArea; +import javafx.scene.layout.HBox; +import javafx.scene.layout.Priority; + +import org.apache.commons.lang.text.StrSubstitutor; +import org.eclipse.fx.code.compensator.project.bt.BugTrackerInstance; +import org.eclipse.fx.code.compensator.project.bt.BugTrackerInstance.BugTrackerIssue; +import org.eclipse.fx.code.compensator.project.bt.BugTrackerInstance.CommitAction; +import org.eclipse.fx.code.compensator.project.vcs.git.GitVCSRepositoryInstance.CommitData; +import org.eclipse.fx.ui.controls.list.SimpleListCell; +import org.eclipse.fx.ui.panes.GridData; +import org.eclipse.fx.ui.panes.GridLayoutPane; + +public class GitCommitDialog extends Dialog<CommitData> { + public static final ButtonType push = new ButtonType("Push", ButtonData.APPLY); + public static final ButtonType commit = new ButtonType("Commit", ButtonData.OK_DONE); + public static final ButtonType cancel = new ButtonType("Cancel", ButtonData.CANCEL_CLOSE); + private TextArea text; + + private Collection<Path> paths; + private CheckBox gerritChange; + private CheckBox ammendCommit; + private List<BugData> bugData = new ArrayList<>(); + private TextArea commitMessage; + + private static class BugData { + private final ComboBox<CommitAction> action; + private final ComboBox<BugTrackerIssue> issue; + + public BugData(ComboBox<CommitAction> action, ComboBox<BugTrackerIssue> issue) { + this.action = action; + this.issue = issue; + } + } + + public GitCommitDialog(Collection<BugTrackerInstance> instance, Collection<Path> paths) { + this.paths = paths; + setHeaderText("Commit changes"); + getDialogPane().getStyleClass().add("commit-dialog"); + getDialogPane().getButtonTypes().addAll(push, commit, cancel); + getDialogPane().getStylesheets().add(getClass().getResource("dialog.css").toExternalForm()); + setResultConverter(this::commitConverter); + + TabPane tabPane = new TabPane(); + tabPane.setSide(Side.RIGHT); + tabPane.setTabClosingPolicy(TabClosingPolicy.UNAVAILABLE); + + GridLayoutPane pane = new GridLayoutPane(); + + { + //FIXME need to deal with multi bug tracker per project + //FIXME Support multiple issues + Label l = new Label("Issue(s)"); + + HBox box = new HBox(5); + + ObservableList<CommitAction> list = FXCollections.observableArrayList(BugTrackerInstance.NO_ACTION); + list.addAll(instance.iterator().next().getCommitActions()); + ComboBox<CommitAction> action = new ComboBox<CommitAction>() { + @Override + protected double computeMinWidth(double height) { + return computePrefWidth(height); + } + }; + action.setButtonCell(new SimpleListCell<CommitAction>( + o -> o.getLabel(), + o -> o.getGraphic(), + o -> Collections.emptyList())); + action.setCellFactory( e -> new SimpleListCell<CommitAction>( + o -> o.getLabel(), + o -> o.getGraphic(), + o -> Collections.emptyList()) ); + action.setItems(list); + action.getSelectionModel().select(BugTrackerInstance.NO_ACTION); + + ComboBox<BugTrackerIssue> bug = new ComboBox<>(); + bug.setButtonCell(new SimpleListCell<BugTrackerIssue>( + o -> o.getId() + " - " + o.getTitle(), + o -> Collections.emptyList())); + bug.setCellFactory( v -> new SimpleListCell<BugTrackerIssue>( + o -> o.getId() + " - " + o.getTitle(), + o -> Collections.emptyList())); + bug.setMaxWidth(Double.MAX_VALUE); + bug.setItems(instance.iterator().next().getIssues()); + HBox.setHgrow(bug, Priority.ALWAYS); + + bugData.add(new BugData(action,bug)); + + Button b = new Button("New Bug ...") { + protected double computeMinWidth(double height) { + return computePrefWidth(height); + } + }; + box.getChildren().addAll(action, bug, b); + + GridLayoutPane.setConstraint(box, new GridData(GridData.FILL_HORIZONTAL)); + pane.getChildren().addAll(l, box); + } + + { + Label l = new Label("Message"); + + text = new TextArea(); + + GridLayoutPane.setConstraint(text, new GridData(GridData.FILL_HORIZONTAL)); + + pane.getChildren().addAll(l, text); + } + + { + HBox box = new HBox(5); + + gerritChange = new CheckBox("Gerrit change id"); + ammendCommit = new CheckBox("Ammend"); + box.getChildren().addAll(gerritChange, ammendCommit); + GridLayoutPane.setConstraint(box, new GridData(GridData.FILL_HORIZONTAL)); + + pane.getChildren().addAll(box); + } + + Tab commitData = new Tab("Data", pane); + tabPane.getTabs().add(commitData); + + commitMessage = new TextArea(); + commitMessage.setEditable(false); + + commitMessage.textProperty().bind(new StringBinding() { + + { + bind(text.textProperty(), gerritChange.selectedProperty(), bugData.get(0).action.getSelectionModel().selectedItemProperty(), bugData.get(0).issue.getSelectionModel().selectedItemProperty()); + } + + @Override + protected String computeValue() { + return calculateMessage(); + } + + }); + + Tab finalCommit = new Tab("Summary",commitMessage); + tabPane.getTabs().add(finalCommit); + + getDialogPane().setContent(tabPane); + } + + private String calculateMessage() { + String message = this.text.getText(); + + List<String> data = new ArrayList<>(); + for( BugData b : bugData ) { + CommitAction a = b.action.getSelectionModel().getSelectedItem(); + BugTrackerIssue issue = b.issue.getSelectionModel().getSelectedItem(); + if( issue != null && a != BugTrackerInstance.NO_ACTION ) { + Map<String, String> map = new HashMap<>(); + map.put("id", issue.getId()); + map.put("title", issue.getTitle()); + data.add( StrSubstitutor.replace(a.getMessageTemplate(), map)); + } + } + + + if( ! data.isEmpty() ) { + if( ! message.isEmpty() ) { + message += "\n\n"; + } + message += data.stream().collect(Collectors.joining("")); + } + + if( gerritChange.isSelected() ) { + message += "\nChange-Id: I0000000000000000000000000000000000000000"; + } + + return message; + } + + private CommitData commitConverter(ButtonType type) { + if( type == cancel ) { + return CommitData.CANCEL; + } else { + return new CommitData(type, calculateMessage(), paths, ammendCommit.isSelected(), gerritChange.isSelected()); + } + } + +} diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.vcs.git/src/org/eclipse/fx/code/compensator/project/vcs/git/GitVCSRepositoryInstance.java b/experimental/compensator/org.eclipse.fx.code.compensator.project.vcs.git/src/org/eclipse/fx/code/compensator/project/vcs/git/GitVCSRepositoryInstance.java index 6a2877cae..f9cbde38d 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project.vcs.git/src/org/eclipse/fx/code/compensator/project/vcs/git/GitVCSRepositoryInstance.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.vcs.git/src/org/eclipse/fx/code/compensator/project/vcs/git/GitVCSRepositoryInstance.java @@ -1,27 +1,59 @@ package org.eclipse.fx.code.compensator.project.vcs.git; +import java.io.File; import java.io.IOException; import java.nio.file.Path; import java.util.Collection; +import java.util.Collections; +import java.util.Date; +import javafx.scene.control.ButtonType; + +import org.eclipse.fx.code.compensator.model.workbench.VCSRepository; import org.eclipse.fx.code.compensator.project.InstanceProject; import org.eclipse.fx.code.compensator.project.vcs.VCSRepositoryInstance; +import org.eclipse.fx.code.compensator.project.vcs.VersionControlService; +import org.eclipse.jgit.api.CommitCommand; +import org.eclipse.jgit.api.Git; +import org.eclipse.jgit.api.PushCommand; +import org.eclipse.jgit.api.errors.GitAPIException; +import org.eclipse.jgit.errors.UnsupportedCredentialItem; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.storage.file.FileRepositoryBuilder; +import org.eclipse.jgit.transport.CredentialItem; +import org.eclipse.jgit.transport.CredentialsProvider; +import org.eclipse.jgit.transport.URIish; public class GitVCSRepositoryInstance implements VCSRepositoryInstance { private Path path; private Repository repo; + private Git git; + + private final GitVersionControlService service; + private final InstanceProject project; + private final VCSRepository repository; - public GitVCSRepositoryInstance(Path path) { + public GitVCSRepositoryInstance(InstanceProject project, VCSRepository repository, GitVersionControlService service, Path path) { + this.service = service; + this.project = project; + this.repository = repository; this.path = path; try { FileRepositoryBuilder builder = new FileRepositoryBuilder(); - repo = builder.setGitDir(path.toFile()).readEnvironment().findGitDir().build(); + repo = builder.setGitDir(new File(path.toFile(),".git")).readEnvironment().findGitDir().build(); + git = new Git(repo); +// git.branchCreate().setName("master") +// .setUpstreamMode(SetupUpstreamMode.SET_UPSTREAM) +// .setStartPoint("origin/master").setForce(true).call(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); - } + } + } + + @Override + public VersionControlService getService() { + return service; } @Override @@ -55,7 +87,83 @@ public class GitVCSRepositoryInstance implements VCSRepositoryInstance { @Override public void commit(Collection<Path> pathList) { - System.err.println("COMMIT: " + pathList); + + GitCommitDialog dialog = new GitCommitDialog(project.getBugtrackerInstanceList(), pathList); + dialog.showAndWait().ifPresent( this::handleCommit ); + + } + private void handleCommit(CommitData c) { + if( c.type != GitCommitDialog.cancel ) { + CommitCommand cmd = git.commit(); + for( Path p : c.paths ) { + System.err.println("PATH: " + p); + cmd.setOnly(path.relativize(p).toString()); + } + cmd + .setMessage(c.message) + .setAmend(c.amend); + + try { + cmd.call(); + + if(c.type == GitCommitDialog.push) { + git.push().setCredentialsProvider(new SSHCredentialProvider(repository.getRepoPassword())).add("master").call(); + } + } catch (GitAPIException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + + public static class CommitData { + public final ButtonType type; + public final String message; + public final Collection<Path> paths; + public final boolean amend; + public final boolean gerritChange; + + public static CommitData CANCEL = new CommitData(ButtonType.CANCEL, "", Collections.emptyList(), false, false); + + public CommitData(ButtonType type, String message, Collection<Path> paths, boolean amend, boolean gerritChange) { + this.type = type; + this.message = message; + this.paths = paths; + this.amend = amend; + this.gerritChange = gerritChange; + } + } + + static class SSHCredentialProvider extends CredentialsProvider { + private String password; + + public SSHCredentialProvider(String password) { + this.password = password; + } + + @Override + public boolean get(URIish arg0, CredentialItem... items) throws UnsupportedCredentialItem { + for (CredentialItem item : items) { + if (item instanceof CredentialItem.StringType) { + ((CredentialItem.StringType) item). + setValue(password); + continue; + } + } + return true; + } + + @Override + public boolean isInteractive() { + return true; + } + + @Override + public boolean supports(CredentialItem... arg0) { + return true; + } + + } } diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.vcs.git/src/org/eclipse/fx/code/compensator/project/vcs/git/GitVersionControlService.java b/experimental/compensator/org.eclipse.fx.code.compensator.project.vcs.git/src/org/eclipse/fx/code/compensator/project/vcs/git/GitVersionControlService.java index 56539d92f..b37c0dd9b 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project.vcs.git/src/org/eclipse/fx/code/compensator/project/vcs/git/GitVersionControlService.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.vcs.git/src/org/eclipse/fx/code/compensator/project/vcs/git/GitVersionControlService.java @@ -6,6 +6,8 @@ import java.nio.file.Paths; import java.util.HashMap; import java.util.Map; +import org.eclipse.fx.code.compensator.model.workbench.VCSRepository; +import org.eclipse.fx.code.compensator.project.InstanceProject; import org.eclipse.fx.code.compensator.project.ProjectNavigatorItem; import org.eclipse.fx.code.compensator.project.vcs.VCSRepositoryInstance; import org.eclipse.fx.code.compensator.project.vcs.VCSRootNavigatorItem; @@ -40,14 +42,18 @@ public class GitVersionControlService implements VersionControlService { @Override public ReturnValue<URI> cloneRepository(Path localDirectory, String url, String username, String password, ProgressReporter reporter) { - if( url.startsWith("ssh://") ) { + if( url.startsWith("ssh:") ) { url = "ssh://"+ username + "@" + url.substring("ssh://".length()); } else if( url.startsWith("https://") ) { url = "https://"+ username + "@" + url.substring("https://".length()); } + Git result = null; try { result = Git.cloneRepository().setURI(url).setCredentialsProvider(new SSHCredentialProvider(password)).setDirectory(localDirectory.toFile()).call(); + if( result == null ) { + throw new IllegalStateException(); + } return ReturnValue.ok(localDirectory.toUri()); } catch (GitAPIException e) { return ReturnValue.error("Unable to clone repository", e); @@ -94,15 +100,9 @@ public class GitVersionControlService implements VersionControlService { return new GitRepositoryItem(parent, repository, repository.getRootPath()); } - private Map<String, GitVCSRepositoryInstance> instanceMap = new HashMap<>(); @Override - public VCSRepositoryInstance getOrCreateRepository(String uri) { - GitVCSRepositoryInstance rv = instanceMap.get(uri); - if( rv == null ) { - rv = new GitVCSRepositoryInstance(Paths.get(URI.create(uri))); - instanceMap.put(uri, rv); - } - return rv; + public VCSRepositoryInstance createRepository(InstanceProject project, VCSRepository repository, String uri) { + return new GitVCSRepositoryInstance(project, repository, this,Paths.get(URI.create(uri))); } } diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project.vcs.git/src/org/eclipse/fx/code/compensator/project/vcs/git/dialog.css b/experimental/compensator/org.eclipse.fx.code.compensator.project.vcs.git/src/org/eclipse/fx/code/compensator/project/vcs/git/dialog.css new file mode 100644 index 000000000..df6511b6b --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project.vcs.git/src/org/eclipse/fx/code/compensator/project/vcs/git/dialog.css @@ -0,0 +1,3 @@ +.combo-box > .list-cell > .label { + -fx-text-fill: -fx-text-base-color; +}
\ No newline at end of file diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project/META-INF/MANIFEST.MF b/experimental/compensator/org.eclipse.fx.code.compensator.project/META-INF/MANIFEST.MF index b2dff9557..c707b41e8 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project/META-INF/MANIFEST.MF +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project/META-INF/MANIFEST.MF @@ -4,6 +4,8 @@ Bundle-Name: Project Bundle-SymbolicName: org.eclipse.fx.code.compensator.project;singleton:=true Bundle-Version: 1.0.0.qualifier Export-Package: org.eclipse.fx.code.compensator.project, + org.eclipse.fx.code.compensator.project.bt, + org.eclipse.fx.code.compensator.project.ci, org.eclipse.fx.code.compensator.project.navigator, org.eclipse.fx.code.compensator.project.vcs Require-Bundle: org.eclipse.e4.ui.model.workbench;bundle-version="1.1.0.v20140512-1820", @@ -21,7 +23,8 @@ Require-Bundle: org.eclipse.e4.ui.model.workbench;bundle-version="1.1.0.v2014051 javax.inject, org.eclipse.e4.ui.services, org.eclipse.fx.code.compensator.editor, - org.eclipse.e4.core.services + org.eclipse.e4.core.services, + org.eclipse.fx.ui.dialogs Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Service-Component: OSGI-INF/services/projectsetupcf.xml,OSGI-INF/services/projectextractorcf.xml,OSGI-INF/services/projectstylesheet.xml, OSGI-INF/services/projectinstancecf.xml diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project/css/dark.css b/experimental/compensator/org.eclipse.fx.code.compensator.project/css/dark.css index 252defa61..c5bc04ed6 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project/css/dark.css +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project/css/dark.css @@ -2,11 +2,11 @@ -fx-background-color: transparent; } -.new_project_dialog { - -fx-graphic: url(icons/64/newprj_wiz.png); +.titleDialog_Icon-new_project_dialog { + -fx-image: url(icons/64/newprj_wiz.png); } -.open_project_dialog { - -fx-graphic: url(icons/64/prj_obj.png); +.titleDialog_Icon-open_project_dialog { + -fx-image: url(icons/64/prj_obj.png); } diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project/css/default.css b/experimental/compensator/org.eclipse.fx.code.compensator.project/css/default.css index 252defa61..c5bc04ed6 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project/css/default.css +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project/css/default.css @@ -2,11 +2,11 @@ -fx-background-color: transparent; } -.new_project_dialog { - -fx-graphic: url(icons/64/newprj_wiz.png); +.titleDialog_Icon-new_project_dialog { + -fx-image: url(icons/64/newprj_wiz.png); } -.open_project_dialog { - -fx-graphic: url(icons/64/prj_obj.png); +.titleDialog_Icon-open_project_dialog { + -fx-image: url(icons/64/prj_obj.png); } diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project/fragment.e4xmi b/experimental/compensator/org.eclipse.fx.code.compensator.project/fragment.e4xmi index fbc1f51fc..404f26e0d 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project/fragment.e4xmi +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project/fragment.e4xmi @@ -50,6 +50,7 @@ <elements xsi:type="commands:Command" xmi:id="_quw04JZZEeSjZ8iCNzGAiA" elementId="org.eclipse.fx.code.compensator.project.command.openresource" commandName="Open Resource"> <parameters xmi:id="_1IWe4JZZEeSjZ8iCNzGAiA" elementId="resourceURI" name="Resource URI"/> </elements> + <elements xsi:type="commands:Command" xmi:id="_fOAgMK5PEeSz6N7pcF6h1g" elementId="org.eclipse.fx.code.compensator.project.commit.activeInput" commandName="Commit Active Input"/> </fragments> <fragments xsi:type="fragment:StringModelFragment" xmi:id="_SOxssIPpEeS5JpVAKZcwIQ" featurename="handlers" parentElementId="org.eclipse.fx.code.compensator.app"> <elements xsi:type="commands:Handler" xmi:id="_Xsst8IPpEeS5JpVAKZcwIQ" elementId="org.eclipse.fx.code.compensator.project.handler.0" contributionURI="bundleclass://org.eclipse.fx.code.compensator.project/org.eclipse.fx.code.compensator.project.internal.commands.NewLocalProject" command="_bSwrIIPoEeS5JpVAKZcwIQ"/> @@ -57,5 +58,6 @@ <elements xsi:type="commands:Handler" xmi:id="_1e0r4IopEeS5JpVAKZcwIQ" elementId="org.eclipse.fx.code.compensator.project.handler.2" contributionURI="bundleclass://org.eclipse.fx.code.compensator.project/org.eclipse.fx.code.compensator.project.internal.commands.OpenProjectDialog" command="_prnAAIPoEeS5JpVAKZcwIQ"/> <elements xsi:type="commands:Handler" xmi:id="_wR0BAJZJEeSjZ8iCNzGAiA" elementId="org.eclipse.fx.code.compensator.project.handler.3" contributionURI="bundleclass://org.eclipse.fx.code.compensator.project/org.eclipse.fx.code.compensator.project.internal.commands.SwitchPlayground" command="_u3zK4IRSEeS5JpVAKZcwIQ"/> <elements xsi:type="commands:Handler" xmi:id="_vG9kMJZZEeSjZ8iCNzGAiA" elementId="org.eclipse.fx.code.compensator.project.handler.4" contributionURI="bundleclass://org.eclipse.fx.code.compensator.project/org.eclipse.fx.code.compensator.project.internal.commands.OpenResource" command="_quw04JZZEeSjZ8iCNzGAiA"/> + <elements xsi:type="commands:Handler" xmi:id="_kkfcsK5PEeSz6N7pcF6h1g" elementId="org.eclipse.fx.code.compensator.project.handler.5" contributionURI="bundleclass://org.eclipse.fx.code.compensator.project/org.eclipse.fx.code.compensator.project.internal.commands.CommitActiveInput" command="_fOAgMK5PEeSz6N7pcF6h1g"/> </fragments> </fragment:ModelFragments> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/Constants.java b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/Constants.java new file mode 100644 index 000000000..13f489d64 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/Constants.java @@ -0,0 +1,8 @@ +package org.eclipse.fx.code.compensator.project; + +public class Constants { + public static final String TOPIC_ROOT = "org/eclipse/fx/code/compensator/project"; + public static final String TOPIC_RESOURCE = TOPIC_ROOT + "/resource"; + public static final String TOPIC_FILE = TOPIC_RESOURCE + "/file"; + public static final String TOPIC_NEW_FILE = TOPIC_FILE + "/new"; +} diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/EditorNavigation.java b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/EditorNavigation.java index f761dc93d..3d5562393 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/EditorNavigation.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/EditorNavigation.java @@ -1,32 +1,33 @@ package org.eclipse.fx.code.compensator.project; -import javafx.geometry.Insets; +import java.util.Collections; + import javafx.geometry.Orientation; import javafx.scene.control.Label; import javafx.scene.control.Separator; -import javafx.scene.control.ToolBar; import javafx.scene.control.Tooltip; -import javafx.scene.layout.Background; -import javafx.scene.layout.BackgroundFill; import javafx.scene.layout.BorderPane; -import javafx.scene.layout.CornerRadii; import javafx.scene.layout.HBox; import javafx.scene.layout.Pane; import javafx.scene.layout.Priority; -import javafx.scene.paint.Color; import javax.annotation.PostConstruct; import javax.inject.Inject; +import org.eclipse.fx.code.compensator.project.internal.commands.CommitActiveInput; import org.eclipse.fx.core.URI; +import org.eclipse.fx.core.command.CommandService; import org.eclipse.fx.ui.services.resources.GraphicsLoader; public class EditorNavigation { private final GraphicsLoader provider; + private final CommandService commandService; + @Inject - public EditorNavigation(GraphicsLoader provider) { + public EditorNavigation(GraphicsLoader provider, CommandService commandService) { this.provider = provider; + this.commandService = commandService; } @PostConstruct @@ -65,7 +66,10 @@ public class EditorNavigation { "org.eclipse.fx.code.compensator.project", "css/icons/16/commit.png"))); label.setTooltip(new Tooltip("Commit")); - box.getChildren().add(label); + box.getChildren().add(label); + label.setOnMouseClicked(e -> { + commandService.execute(CommitActiveInput.COMMAND_ID, Collections.emptyMap()); + }); } p.setTop(box); diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/InstanceProject.java b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/InstanceProject.java index d69593fb9..fb28d3e58 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/InstanceProject.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/InstanceProject.java @@ -7,10 +7,13 @@ import java.util.ArrayList; import java.util.List; import org.eclipse.e4.core.services.events.IEventBroker; +import org.eclipse.fx.code.compensator.model.workbench.BugTracker; import org.eclipse.fx.code.compensator.model.workbench.LocalProject; import org.eclipse.fx.code.compensator.model.workbench.Module; import org.eclipse.fx.code.compensator.model.workbench.Project; import org.eclipse.fx.code.compensator.model.workbench.VCSRepository; +import org.eclipse.fx.code.compensator.project.bt.BugTrackerInstance; +import org.eclipse.fx.code.compensator.project.bt.BugTrackerService; import org.eclipse.fx.code.compensator.project.vcs.VCSRepositoryInstance; import org.eclipse.fx.code.compensator.project.vcs.VersionControlService; @@ -19,19 +22,34 @@ public abstract class InstanceProject { private final List<VersionControlService> versionControlServiceList; private final IEventBroker eventBroker; private final List<VCSRepositoryInstance> repositoryInstanceList = new ArrayList<>(); + private final List<BugTrackerService> bugtrackerServiceList; + private final List<BugTrackerInstance> bugtrackerInstanceList = new ArrayList<>(); public InstanceProject( IEventBroker eventBroker, Project project, - List<VersionControlService> versionControlServiceList) { + List<VersionControlService> versionControlServiceList, + List<BugTrackerService> bugtrackerServiceList) { this.eventBroker = eventBroker; this.project = project; + this.project.setUserdata(this); + this.bugtrackerServiceList = bugtrackerServiceList; this.versionControlServiceList = versionControlServiceList; if( this.project instanceof LocalProject ) { ((LocalProject)this.project).getVcsRepositoryList().forEach(this::handleRepository); } + project.getBugTrackerList().forEach(this::handleBugtracker); } + private void handleBugtracker(BugTracker bugtracker) { + bugtrackerInstanceList.add(getBugtrackerServiceList() + .stream() + .filter( s -> s.getId().equals(bugtracker.getBugtrackerType()) ) + .findFirst(). + map(s -> s.createInstance(bugtracker)).get()); + } + + private void handleRepository(VCSRepository repository) { Path path = Paths.get(java.net.URI.create(repository.getLocalURI())); if( ! Files.exists(path) ) { @@ -45,7 +63,7 @@ public abstract class InstanceProject { .stream() .filter(v -> v.getId().equals(repository.getRepoType())) .findFirst() - .map(v -> v.getOrCreateRepository(repository.getLocalURI())).get()); + .map(v -> v.createRepository(this,repository,repository.getLocalURI())).get()); } public final Project getProject() { @@ -60,6 +78,14 @@ public abstract class InstanceProject { return versionControlServiceList; } + public final List<BugTrackerInstance> getBugtrackerInstanceList() { + return bugtrackerInstanceList; + } + + public List<BugTrackerService> getBugtrackerServiceList() { + return bugtrackerServiceList; + } + public IEventBroker getEventBroker() { return eventBroker; } diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/ProjectMainToolbar.java b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/ProjectMainToolbar.java index b0543f058..600c3c587 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/ProjectMainToolbar.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/ProjectMainToolbar.java @@ -1,8 +1,10 @@ package org.eclipse.fx.code.compensator.project; +import java.util.Collections; import java.util.Iterator; import java.util.stream.Collectors; + import javafx.geometry.Orientation; import javafx.scene.Node; import javafx.scene.control.Button; @@ -11,13 +13,23 @@ import javafx.scene.control.ToolBar; import javafx.scene.control.Tooltip; import javafx.scene.layout.BorderPane; + import javax.annotation.PostConstruct; +import javax.inject.Inject; + import org.eclipse.fx.code.compensator.project.ProjectService.ToolbarElement; import org.eclipse.fx.code.compensator.project.ProjectService.ToolbarGroup; +import org.eclipse.fx.core.command.CommandService; public class ProjectMainToolbar { - + private final CommandService commandService; + + @Inject + public ProjectMainToolbar(CommandService commandService) { + this.commandService = commandService; + } + @PostConstruct public void init(BorderPane parent, ProjectService service) { ToolBar tb = new ToolBar(); @@ -29,7 +41,7 @@ public class ProjectMainToolbar { while( iterator.hasNext() ) { ToolbarGroup tg = iterator.next(); - tb.getItems().addAll(tg.getElementList().stream().map(ProjectMainToolbar::createItem).collect(Collectors.toList())); + tb.getItems().addAll(tg.getElementList().stream().map(this::createItem).collect(Collectors.toList())); if( iterator.hasNext() ) { tb.getItems().add(new Separator()); @@ -39,10 +51,13 @@ public class ProjectMainToolbar { parent.setCenter(tb); } - static Node createItem(ToolbarElement e) { + Node createItem(ToolbarElement e) { Button b = new Button(); b.getStyleClass().add(e.id); b.setTooltip(new Tooltip(e.tooltip)); + b.setOnAction(a -> { + commandService.execute(e.commandId, Collections.emptyMap()); + }); return b; } } diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/ProjectNavigator.java b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/ProjectNavigator.java index 185f5ab75..214f99f7e 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/ProjectNavigator.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/ProjectNavigator.java @@ -2,9 +2,7 @@ package org.eclipse.fx.code.compensator.project; import java.nio.file.Files; import java.nio.file.Path; -import java.util.ArrayList; import java.util.Collections; -import java.util.List; import java.util.stream.Collectors; import javafx.beans.property.Property; @@ -20,7 +18,6 @@ import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; import javax.inject.Inject; import org.eclipse.e4.ui.model.application.ui.MUIElement; @@ -100,10 +97,10 @@ public class ProjectNavigator { } } - @PreDestroy - void close() { - navigatorSelection.unbind(); - } +// @PreDestroy +// void close() { +// navigatorSelection.unbind(); +// } private static ObservableList<TreeItem<ProjectNavigatorItem>> createChildren(TreeItem<ProjectNavigatorItem> parent) { ObservableList<TreeItem<ProjectNavigatorItem>> rv = FXCollections.observableArrayList(); @@ -116,7 +113,7 @@ public class ProjectNavigator { } parent.getValue().getChildren().addListener( (Change<? extends ProjectNavigatorItem> c) -> { while( c.next() ) { - rv.addAll(c.getAddedSubList() + rv.addAll(c.getFrom(),c.getAddedSubList() .stream() .map(i -> i.isLeaf() ? new TreeItem<ProjectNavigatorItem>(i) : new LazyTreeItem<ProjectNavigatorItem>(i, ProjectNavigator::createChildren)) .collect(Collectors.toList())); diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/ProjectService.java b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/ProjectService.java index 9e69aa12b..4d9d1a600 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/ProjectService.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/ProjectService.java @@ -65,11 +65,13 @@ public interface ProjectService { public static abstract class ToolbarElement { public final String id; + public final String commandId; public final String tooltip; - public ToolbarElement(String id, String tooltip) { + public ToolbarElement(String id, String tooltip, String commandId) { this.id = id; this.tooltip = tooltip; + this.commandId = commandId; } } diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/bt/BugTrackerInstance.java b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/bt/BugTrackerInstance.java new file mode 100644 index 000000000..dfdbe227c --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/bt/BugTrackerInstance.java @@ -0,0 +1,104 @@ +package org.eclipse.fx.code.compensator.project.bt; + +import java.util.List; +import java.util.function.Supplier; + +import javafx.collections.ObservableList; +import javafx.scene.Node; + +public interface BugTrackerInstance { + public static CommitAction NO_ACTION = new DefaultAction("--", () -> null); + + public interface CommitAction { + public String getLabel(); + public Node getGraphic(); + public String getMessageTemplate(); + } + + public static class DefaultAction implements CommitAction { + private final String label; + private final Supplier<Node> supplier; + private final String messageTemplate; + + public DefaultAction(String label, String messageTemplate, Supplier<Node> supplier) { + this.label = label; + this.messageTemplate = messageTemplate; + this.supplier = supplier; + } + + public DefaultAction(String label, String messageTemplate) { + this.label = label; + this.messageTemplate = messageTemplate; + this.supplier = null; + } + + public DefaultAction(String label, Supplier<Node> supplier) { + this.label = label; + this.supplier = supplier; + this.messageTemplate = null; + } + + public DefaultAction(String label) { + this.label = label; + this.supplier = null; + this.messageTemplate = null; + } + + @Override + public String getLabel() { + return label; + } + + @Override + public Node getGraphic() { + return supplier != null ? supplier.get() : null; + } + + @Override + public String getMessageTemplate() { + return messageTemplate; + } + } + + public interface IssueState { + public String getLabel(); + public Node getGraphic(); + } + + public static class DefaultIssueState implements IssueState { + private final String label; + private final Supplier<Node> graphicSupplier; + + public DefaultIssueState(String label, Supplier<Node> graphicSupplier) { + this.label = label; + this.graphicSupplier = graphicSupplier; + } + + @Override + public String getLabel() { + return this.label; + } + + @Override + public Node getGraphic() { + return this.graphicSupplier != null ? this.graphicSupplier.get() : null; + } + } + + public interface BugTrackerIssue { + public String getId(); + public String getTitle(); + public String getDescription(); + public IssueState getState(); + public ObservableList<BugFollowUp> getFollowUpList(); + } + + public interface BugFollowUp { + public String getId(); + public String getDescription(); + } + + public List<CommitAction> getCommitActions(); + public ObservableList<BugTrackerIssue> getIssues(); + public BugTrackerService getService(); +} diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/bt/BugTrackerRootNavigatorItem.java b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/bt/BugTrackerRootNavigatorItem.java new file mode 100644 index 000000000..8abce9024 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/bt/BugTrackerRootNavigatorItem.java @@ -0,0 +1,7 @@ +package org.eclipse.fx.code.compensator.project.bt; + +import org.eclipse.fx.code.compensator.project.ProjectNavigatorItem; + +public interface BugTrackerRootNavigatorItem extends ProjectNavigatorItem { + +} diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/bt/BugTrackerService.java b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/bt/BugTrackerService.java index 923e5abc9..2ab68ad97 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/bt/BugTrackerService.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/bt/BugTrackerService.java @@ -1,6 +1,12 @@ package org.eclipse.fx.code.compensator.project.bt; +import org.eclipse.fx.code.compensator.model.workbench.BugTracker; +import org.eclipse.fx.code.compensator.project.ProjectNavigatorItem; + public interface BugTrackerService { public String getLabel(); public String getId(); + + public BugTrackerInstance createInstance(BugTracker bugtracker); + public BugTrackerRootNavigatorItem mapRepository(ProjectNavigatorItem parent, BugTrackerInstance instance); } diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/internal/commands/CommitActiveInput.java b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/internal/commands/CommitActiveInput.java new file mode 100644 index 000000000..001241bda --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/internal/commands/CommitActiveInput.java @@ -0,0 +1,14 @@ +package org.eclipse.fx.code.compensator.project.internal.commands; + +import javax.inject.Named; + +import org.eclipse.e4.core.di.annotations.Execute; +import org.eclipse.fx.code.compensator.editor.VCSInput; + +public class CommitActiveInput { + public static final String COMMAND_ID = "org.eclipse.fx.code.compensator.project.commit.activeInput"; + @Execute + public void commit(@Named("activeInput") VCSInput<?> input) { + input.commit(); + } +} diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/internal/commands/NewLocalProject.java b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/internal/commands/NewLocalProject.java index 6b31d5ff6..8ec00a198 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/internal/commands/NewLocalProject.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/internal/commands/NewLocalProject.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.UUID; import javafx.collections.FXCollections; +import javafx.scene.Node; import javafx.scene.control.ButtonType; import javafx.scene.control.ComboBox; import javafx.scene.control.Dialog; @@ -13,6 +14,7 @@ import javafx.scene.control.ListCell; import javafx.scene.control.PasswordField; import javafx.scene.control.TextField; import javafx.scene.control.TitledPane; +import javafx.scene.layout.StackPane; import javafx.stage.Stage; import org.eclipse.e4.core.di.annotations.Execute; @@ -27,11 +29,25 @@ import org.eclipse.fx.core.URI; import org.eclipse.fx.core.command.CommandService; import org.eclipse.fx.core.di.ScopedObjectFactory; import org.eclipse.fx.core.di.Service; +import org.eclipse.fx.ui.controls.stage.DefaultWindowPane; +import org.eclipse.fx.ui.dialogs.TitleAreaDialog; import org.eclipse.fx.ui.panes.GridData; import org.eclipse.fx.ui.panes.GridLayoutPane; import org.eclipse.fx.ui.services.resources.GraphicsLoader; public class NewLocalProject { + TextField nameField; + ComboBox<ProjectService> projectType; + ComboBox<VersionControlService> repoType; + TextField repoUrl; + TextField repoLocalDir; + TextField repoUser; + TextField repoPassword; + ComboBox<String> bugtrackerType; + TextField bugTrackerUrl; + TextField bugTrackerUser; + TextField bugTrackerPassword; + @Execute public void execute(Stage parent, Workbench workbench, @Service List<ProjectService> projectServices, @@ -39,26 +55,50 @@ public class NewLocalProject { CommandService cmdService, GraphicsLoader loader, ScopedObjectFactory objFactory) { - Dialog<ButtonType> d = new Dialog<>(); - d.setHeaderText("Create new local project"); - d.getDialogPane().getStyleClass().add("new_project_dialog"); - d.getDialogPane().getButtonTypes() - .addAll(ButtonType.OK, ButtonType.CANCEL); - + TitleAreaDialog dialog = new TitleAreaDialog(parent,"Create new local project","New local project","Provide in the fields below all informations to setup a local project","new_project_dialog") { + + @Override + protected Node createDialogContent() { + return NewLocalProject.this.createDialogContent(projectServices, versionControl, loader); + } + + protected org.eclipse.fx.ui.controls.stage.WindowPane getCustomWindowPane() { + return new DefaultWindowPane(new StackPane()); + } + }; + + if( dialog.open() == TitleAreaDialog.OK_BUTTON ) { + LocalProject lp = WorkbenchFactory.eINSTANCE.createLocalProject(); + lp.setProjectId(UUID.randomUUID().toString()); + lp.setName(nameField.getText()); + lp.setProjectType(projectType.getValue().getId()); + + VCSRepository r = WorkbenchFactory.eINSTANCE.createVCSRepository(); + r.setRepoType(repoType.getValue().getId()); + r.setRepoURI(repoUrl.getText()); + r.setLocalURI(repoLocalDir.getText()); + r.setRepoUsername(repoUser.getText()); + r.setRepoPassword(repoPassword.getText()); + lp.getVcsRepositoryList().add(r); + + BugTracker t = WorkbenchFactory.eINSTANCE.createBugTracker(); + t.setBugtrackerType(bugtrackerType.getValue()); + t.setBugtrackerUrl(bugTrackerUrl.getText()); + t.setBugtrackerUsername(bugTrackerUser.getText()); + t.setBugtrackerPassword(bugTrackerPassword.getText()); + lp.getBugTrackerList().add(t); + + workbench.getProjectList().add(lp); + + cmdService.execute("org.eclipse.fx.code.compensator.app.command.openproject", Collections.singletonMap("projectId", lp.getProjectId())); + } + + } + + private Node createDialogContent(List<ProjectService> projectServices, List<VersionControlService> versionControl, GraphicsLoader loader) { GridLayoutPane p = new GridLayoutPane(); p.setMinWidth(600); - TextField nameField; - ComboBox<ProjectService> projectType; - ComboBox<VersionControlService> repoType; - TextField repoUrl; - TextField repoLocalDir; - TextField repoUser; - TextField repoPassword; - ComboBox<String> bugtrackerType; - TextField bugTrackerUrl; - TextField bugTrackerUser; - TextField bugTrackerPassword; { p.getChildren().add(new Label("Name")); @@ -179,36 +219,8 @@ public class NewLocalProject { t.setContent(pp); } - - d.getDialogPane().setContent(p); - d.initOwner(parent); - d.showAndWait().ifPresent(e -> { - if( e == ButtonType.OK ) { - LocalProject lp = WorkbenchFactory.eINSTANCE.createLocalProject(); - lp.setProjectId(UUID.randomUUID().toString()); - lp.setName(nameField.getText()); - lp.setProjectType(projectType.getValue().getId()); - - VCSRepository r = WorkbenchFactory.eINSTANCE.createVCSRepository(); - r.setRepoType(repoType.getValue().getId()); - r.setRepoURI(repoUrl.getText()); - r.setLocalURI(repoLocalDir.getText()); - r.setRepoUsername(repoUser.getText()); - r.setRepoPassword(repoPassword.getText()); - lp.getVcsRepositoryList().add(r); - - BugTracker t = WorkbenchFactory.eINSTANCE.createBugTracker(); - t.setBugtrackerType(bugtrackerType.getValue()); - t.setBugtrackerUrl(bugTrackerUrl.getText()); - t.setBugtrackerUsername(bugTrackerUser.getText()); - t.setBugtrackerPassword(bugTrackerPassword.getText()); - lp.getBugTrackerList().add(t); - - workbench.getProjectList().add(lp); - - cmdService.execute("org.eclipse.fx.code.compensator.app.command.openproject", Collections.singletonMap("projectId", lp.getProjectId())); - } - }); + + return p; } static class ProjectTypeCell extends ListCell<ProjectService> { diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/internal/commands/OpenProjectDialog.java b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/internal/commands/OpenProjectDialog.java index d44b8abcb..6c73a27d8 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/internal/commands/OpenProjectDialog.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/internal/commands/OpenProjectDialog.java @@ -4,9 +4,9 @@ import java.util.Collections; import java.util.List; import javafx.collections.FXCollections; -import javafx.scene.control.ButtonType; -import javafx.scene.control.Dialog; +import javafx.scene.Node; import javafx.scene.control.ListView; +import javafx.scene.layout.StackPane; import javafx.stage.Stage; import org.eclipse.e4.core.di.annotations.Execute; @@ -16,31 +16,36 @@ import org.eclipse.fx.code.compensator.project.ProjectService; import org.eclipse.fx.core.command.CommandService; import org.eclipse.fx.core.di.Service; import org.eclipse.fx.ui.controls.list.SimpleListCell; +import org.eclipse.fx.ui.controls.stage.DefaultWindowPane; import org.eclipse.fx.ui.controls.styledtext.StyledString; import org.eclipse.fx.ui.controls.styledtext.StyledStringSegment; +import org.eclipse.fx.ui.dialogs.TitleAreaDialog; public class OpenProjectDialog { @Execute public void open(Stage parent, Workbench workbench, CommandService cmdService, @Service List<ProjectService> projectServiceList) { - Dialog<ButtonType> d = new Dialog<>(); - d.initOwner(parent); - d.setHeaderText("Open project"); - d.getDialogPane().getStyleClass().add("open_project_dialog"); - d.getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL); - d.setTitle("Open Project"); - ListView<Project> list = new ListView<>(); list.setMinWidth(600); list.setCellFactory(v -> new SimpleListCell<Project>( p -> labelExtractor(p, projectServiceList), p -> cssProvider(p,projectServiceList))); list.setItems(FXCollections.observableArrayList(workbench.getProjectList())); - d.getDialogPane().setContent(list); - d.showAndWait().ifPresent(e -> { - if( e == ButtonType.OK ) { - if( list.getSelectionModel().getSelectedItem() != null ) { - cmdService.execute("org.eclipse.fx.code.compensator.app.command.openproject", Collections.singletonMap("projectId", list.getSelectionModel().getSelectedItem().getProjectId())); - } + + TitleAreaDialog dialog = new TitleAreaDialog(parent,"Open project","Open project","Open an existing project","open_project_dialog") { + + @Override + protected Node createDialogContent() { + return list; + } + + protected org.eclipse.fx.ui.controls.stage.WindowPane getCustomWindowPane() { + return new DefaultWindowPane(new StackPane()); + } + }; + + if( dialog.open() == TitleAreaDialog.OK_BUTTON ) { + if( list.getSelectionModel().getSelectedItem() != null ) { + cmdService.execute("org.eclipse.fx.code.compensator.app.command.openproject", Collections.singletonMap("projectId", list.getSelectionModel().getSelectedItem().getProjectId())); } - }); + } } private static CharSequence labelExtractor(Project p, List<ProjectService> services) { diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/internal/commands/OpenResource.java b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/internal/commands/OpenResource.java index abafd16ef..1760bcef3 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/internal/commands/OpenResource.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/internal/commands/OpenResource.java @@ -30,7 +30,7 @@ public class OpenResource { p.setContributionURI("bundleclass://org.eclipse.fx.code.compensator.editor/org.eclipse.fx.code.compensator.editor.TextEditor"); p.getPersistedState().put(TextEditor.DOCUMENT_URL, uri); p.setLabel(URI.createURI(uri).lastSegment()); - p.setIconURI(lookup.getFileIcon(uri).toString()); + p.setIconURI(lookup.getFileIcon(uri) != null ? lookup.getFileIcon(uri).toString() : null); p.setCloseable(true); p.getTags().add(EPartService.REMOVE_ON_HIDE_TAG); element.getChildren().add(p); diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/navigator/BugtrackerItem.java b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/navigator/BugtrackerContainerItem.java index bc36dfaa3..c1021eb36 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/navigator/BugtrackerItem.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/navigator/BugtrackerContainerItem.java @@ -1,16 +1,21 @@ package org.eclipse.fx.code.compensator.project.navigator; +import java.util.stream.Collectors; + import javafx.collections.FXCollections; import javafx.collections.ObservableList; +import org.eclipse.fx.code.compensator.project.InstanceProject; import org.eclipse.fx.code.compensator.project.ProjectNavigatorItem; import org.eclipse.fx.core.URI; -public class BugtrackerItem implements ProjectNavigatorItem { +public class BugtrackerContainerItem implements ProjectNavigatorItem { private final ProjectItem parent; + private final ObservableList<ProjectNavigatorItem> bugtrackerItems = FXCollections.observableArrayList(); - public BugtrackerItem(ProjectItem parent) { + public BugtrackerContainerItem(ProjectItem parent, InstanceProject project) { this.parent = parent; + bugtrackerItems.addAll(project.getBugtrackerInstanceList().stream().map( i -> i.getService().mapRepository(this, i)).collect(Collectors.toList())); } public ProjectNavigatorItem getParent() { @@ -47,7 +52,7 @@ public class BugtrackerItem implements ProjectNavigatorItem { @Override public ObservableList<ProjectNavigatorItem> getChildren() { - return FXCollections.emptyObservableList(); + return bugtrackerItems; } @Override diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/navigator/FolderItem.java b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/navigator/FolderItem.java index 3775e3564..b5138b09a 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/navigator/FolderItem.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/navigator/FolderItem.java @@ -3,14 +3,19 @@ package org.eclipse.fx.code.compensator.project.navigator; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.util.concurrent.atomic.AtomicInteger; import java.util.function.BiFunction; import java.util.stream.Collectors; +import javafx.application.Platform; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import org.eclipse.fx.code.compensator.project.ProjectNavigatorItem; +import org.eclipse.fx.core.FilesystemService; +import org.eclipse.fx.core.FilesystemService.Kind; import org.eclipse.fx.core.URI; +import org.eclipse.fx.core.Util; public class FolderItem extends PathItem { private ObservableList<ProjectNavigatorItem> items; @@ -28,6 +33,29 @@ public class FolderItem extends PathItem { public FolderItem(ProjectNavigatorItem parent, Path path, BiFunction<Path, FolderItem, PathItem> pathItemFactory) { super(parent,path); this.pathItemFactory = pathItemFactory; + Util.lookupService(FilesystemService.class).observePath(path, this::handleFilesystemMod); + } + + private void handleFilesystemMod(Kind kind, Path path) { + Platform.runLater(() -> _handleFilesystemMod(kind,path)); + } + + public void _handleFilesystemMod(Kind kind, Path path) { + if( items != null ) { + if( path.startsWith(getDomainObject()) ) { + PathItem item = null; + for( ProjectNavigatorItem i : items ) { + PathItem pi = (PathItem) i; + if( path.startsWith(pi.getDomainObject()) ) { + item = pi; + } + } + + if( item == null ) { + refresh(); + } + } + } } public FolderItem(ProjectNavigatorItem parent, Path path) { @@ -49,6 +77,23 @@ public class FolderItem extends PathItem { // TODO Auto-generated method stub return null; } + + public void refresh() { + AtomicInteger idx = new AtomicInteger(); + + //TODO Need to fix that we remove items currently shown if not yet found anymore + try { + Files.newDirectoryStream(path).forEach((p) -> { + if( ! items.stream().filter( i -> ((Path)i.getDomainObject()).equals(p) ).findFirst().isPresent() ) { + items.add(idx.get(), pathItemFactory.apply(p.toAbsolutePath(), this)); + } + idx.incrementAndGet(); + }); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } @Override public ObservableList<ProjectNavigatorItem> getChildren() { @@ -63,7 +108,7 @@ public class FolderItem extends PathItem { } return items; } - + @Override public boolean isLeaf() { // TODO Auto-generated method stub diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/navigator/ProjectItem.java b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/navigator/ProjectItem.java index eeef8b5b2..73a91ed29 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/navigator/ProjectItem.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/navigator/ProjectItem.java @@ -1,14 +1,11 @@ package org.eclipse.fx.code.compensator.project.navigator; -import java.nio.file.Path; - import javafx.collections.FXCollections; import javafx.collections.ObservableList; import org.eclipse.fx.code.compensator.model.workbench.LocalProject; import org.eclipse.fx.code.compensator.project.InstanceProject; import org.eclipse.fx.code.compensator.project.ProjectNavigatorItem; -import org.eclipse.fx.code.compensator.project.vcs.VCSRootNavigatorItem; import org.eclipse.fx.core.URI; public class ProjectItem implements ProjectNavigatorItem { @@ -19,7 +16,7 @@ public class ProjectItem implements ProjectNavigatorItem { public ProjectItem(InstanceProject project) { this.project = project; children.add(new ModuleContainerItem(this,project)); - children.add(new BugtrackerItem(this)); + children.add(new BugtrackerContainerItem(this,project)); children.add(new BuildServerItem(this)); if( project.getProject() instanceof LocalProject ) { vcsContainerItem = new VCSContainerItem(this,project); diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/navigator/VCSContainerItem.java b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/navigator/VCSContainerItem.java index da865fdd5..07a810ace 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/navigator/VCSContainerItem.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/navigator/VCSContainerItem.java @@ -1,18 +1,15 @@ package org.eclipse.fx.code.compensator.project.navigator; -import java.nio.file.Path; import java.util.List; import java.util.stream.Collectors; import javafx.collections.FXCollections; import javafx.collections.ObservableList; -import org.eclipse.e4.core.services.events.IEventBroker; import org.eclipse.fx.code.compensator.model.workbench.LocalProject; import org.eclipse.fx.code.compensator.model.workbench.VCSRepository; import org.eclipse.fx.code.compensator.project.InstanceProject; import org.eclipse.fx.code.compensator.project.ProjectNavigatorItem; -import org.eclipse.fx.code.compensator.project.vcs.VCSRootNavigatorItem; import org.eclipse.fx.core.URI; public class VCSContainerItem implements ProjectNavigatorItem { @@ -23,21 +20,14 @@ public class VCSContainerItem implements ProjectNavigatorItem { public VCSContainerItem(ProjectItem parent, InstanceProject project) { this.parent = parent; this.project = project; - List<VCSRepository> repoList = ((LocalProject)project.getProject()).getVcsRepositoryList(); - children.addAll(repoList.stream().map(this::mapToNavigator).collect(Collectors.toList())); +// List<VCSRepository> repoList = ((LocalProject)project.getProject()).getVcsRepositoryList(); + children.addAll(project.getRepositoryInstanceList().stream().map(r -> r.getService().mapRepository(this, r)).collect(Collectors.toList())); } @Override public ProjectNavigatorItem getParent() { return parent; } - - private ProjectNavigatorItem mapToNavigator(VCSRepository r) { - return project.getVersionControlServiceList().stream() - .filter((v) -> v.getId().equals(r.getRepoType())) - .findFirst() - .map((v) -> v.mapRepository(this,v.getOrCreateRepository(r.getLocalURI()))).get(); - } // public VCSRootNavigatorItem getRootItem(Path path) { // for( ProjectNavigatorItem i : children ) { diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/vcs/VCSRepositoryInstance.java b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/vcs/VCSRepositoryInstance.java index 099f32315..97f6a3b17 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/vcs/VCSRepositoryInstance.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/vcs/VCSRepositoryInstance.java @@ -5,6 +5,7 @@ import java.util.Collection; public interface VCSRepositoryInstance { public Path getRootPath(); + public VersionControlService getService(); public void fetch(); public void push(); public void merge(); diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/vcs/VersionControlService.java b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/vcs/VersionControlService.java index a4d137c6e..3c3a68a94 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/vcs/VersionControlService.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/vcs/VersionControlService.java @@ -16,5 +16,5 @@ public interface VersionControlService { public ReturnValue<URI> cloneRepository(Path localDirectory, String url, String username, String password, ProgressReporter reporter); public VCSRootNavigatorItem mapRepository(ProjectNavigatorItem parent, VCSRepositoryInstance instance); - public VCSRepositoryInstance getOrCreateRepository(String uri); + public VCSRepositoryInstance createRepository(InstanceProject project, VCSRepository repository, String uri); } diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.target.releng/compensator.target b/experimental/compensator/org.eclipse.fx.code.compensator.target.releng/compensator.target index d37579a50..d2a9c080b 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.target.releng/compensator.target +++ b/experimental/compensator/org.eclipse.fx.code.compensator.target.releng/compensator.target @@ -1,14 +1,13 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<?pde version="3.8"?><target name="compensator-target" sequenceNumber="47"> +<?pde version="3.8"?><target name="compensator-target" sequenceNumber="60"> <locations> <location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit"> -<unit id="org.eclipse.fx.code.compensator.target.feature.feature.group" version="1.0.0.201501291702"/> +<unit id="org.eclipse.fx.code.compensator.target.feature.feature.group" version="1.0.0.201502161457"/> <repository location="http://download.eclipse.org/efxclipse/compensator/target/site"/> </location> </locations> <includeBundles> <plugin id="com.google.gson" version="2.1.0.v201303041604"/> -<plugin id="com.google.gson" version="2.2.4.v201311231704"/> <plugin id="com.google.guava"/> <plugin id="com.google.guava.source"/> <plugin id="com.google.inject"/> @@ -290,6 +289,10 @@ <plugin id="org.eclipse.jdt.core"/> <plugin id="org.eclipse.jdt.core.source"/> <plugin id="org.eclipse.jdt.debug"/> +<plugin id="org.eclipse.jdt.junit"/> +<plugin id="org.eclipse.jdt.junit.core"/> +<plugin id="org.eclipse.jdt.junit.runtime"/> +<plugin id="org.eclipse.jdt.junit4.runtime"/> <plugin id="org.eclipse.jdt.launching"/> <plugin id="org.eclipse.jdt.launching.macosx"/> <plugin id="org.eclipse.jetty.continuation"/> @@ -324,6 +327,8 @@ <plugin id="org.eclipse.xtext.xbase"/> <plugin id="org.eclipse.xtext.xbase.lib"/> <plugin id="org.eclipse.xtext.xbase.lib.source"/> +<plugin id="org.hamcrest.core"/> +<plugin id="org.junit"/> <plugin id="org.objectweb.asm"/> <plugin id="org.sat4j.core"/> <plugin id="org.sat4j.pb"/> diff --git a/experimental/compensator/org.eclipse.fx.code.server.jdt.inmemory/src/org/eclipse/fx/code/server/jdt/inmemory/MemJDTServer.java b/experimental/compensator/org.eclipse.fx.code.server.jdt.inmemory/src/org/eclipse/fx/code/server/jdt/inmemory/MemJDTServer.java index fa042ea8f..79dbeb44c 100644 --- a/experimental/compensator/org.eclipse.fx.code.server.jdt.inmemory/src/org/eclipse/fx/code/server/jdt/inmemory/MemJDTServer.java +++ b/experimental/compensator/org.eclipse.fx.code.server.jdt.inmemory/src/org/eclipse/fx/code/server/jdt/inmemory/MemJDTServer.java @@ -51,6 +51,11 @@ public class MemJDTServer implements JDTServer { public Future<String> openFile(String moduleName, String path) { return CompletableFuture.supplyAsync(() -> serverImpl.openFile(moduleName, path)); } + + @Override + public Future<Boolean> createFile(String moduleName, String path, ByteBuffer content) { + return CompletableFuture.supplyAsync(() -> serverImpl.createFile(moduleName,path,content)); + } @Override public Future<ByteBuffer> getFileContent(String id) { diff --git a/experimental/compensator/org.eclipse.fx.code.server.jdt.server/META-INF/MANIFEST.MF b/experimental/compensator/org.eclipse.fx.code.server.jdt.server/META-INF/MANIFEST.MF index 8c8a56cee..575dd85fb 100644 --- a/experimental/compensator/org.eclipse.fx.code.server.jdt.server/META-INF/MANIFEST.MF +++ b/experimental/compensator/org.eclipse.fx.code.server.jdt.server/META-INF/MANIFEST.MF @@ -7,7 +7,8 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Require-Bundle: org.eclipse.core.resources, org.eclipse.jdt.core;bundle-version="3.10.0", org.eclipse.fx.core, - org.eclipse.jdt.launching;bundle-version="3.7.101" + org.eclipse.jdt.launching;bundle-version="3.7.101", + org.eclipse.equinox.preferences Import-Package: org.eclipse.core.runtime, org.eclipse.fx.code.server.jdt.shared, org.osgi.framework;version="1.8.0" diff --git a/experimental/compensator/org.eclipse.fx.code.server.jdt.server/src/org/eclipse/fx/code/server/jdt/server/Activator.java b/experimental/compensator/org.eclipse.fx.code.server.jdt.server/src/org/eclipse/fx/code/server/jdt/server/Activator.java index 8abfdc7d6..300065931 100644 --- a/experimental/compensator/org.eclipse.fx.code.server.jdt.server/src/org/eclipse/fx/code/server/jdt/server/Activator.java +++ b/experimental/compensator/org.eclipse.fx.code.server.jdt.server/src/org/eclipse/fx/code/server/jdt/server/Activator.java @@ -1,6 +1,8 @@ package org.eclipse.fx.code.server.jdt.server; import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.preferences.IEclipsePreferences; +import org.eclipse.core.runtime.preferences.InstanceScope; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; @@ -8,6 +10,12 @@ public class Activator implements BundleActivator { @Override public void start(BundleContext context) throws Exception { + IEclipsePreferences node = InstanceScope.INSTANCE.getNode("org.eclipse.core.resources"); + node.putBoolean(ResourcesPlugin.PREF_LIGHTWEIGHT_AUTO_REFRESH, true); + node.putBoolean(ResourcesPlugin.PREF_AUTO_REFRESH, true); + node.sync(); + node.flush(); + System.err.println("START UP"); } diff --git a/experimental/compensator/org.eclipse.fx.code.server.jdt.server/src/org/eclipse/fx/code/server/jdt/server/JDTServerImpl.java b/experimental/compensator/org.eclipse.fx.code.server.jdt.server/src/org/eclipse/fx/code/server/jdt/server/JDTServerImpl.java index 4332fe608..d04ecaf5a 100644 --- a/experimental/compensator/org.eclipse.fx.code.server.jdt.server/src/org/eclipse/fx/code/server/jdt/server/JDTServerImpl.java +++ b/experimental/compensator/org.eclipse.fx.code.server.jdt.server/src/org/eclipse/fx/code/server/jdt/server/JDTServerImpl.java @@ -1,8 +1,14 @@ package org.eclipse.fx.code.server.jdt.server; -import static org.eclipse.fx.core.function.ExExecutor.*; +import static org.eclipse.fx.core.function.ExExecutor.executeConsumer; +import static org.eclipse.fx.core.function.ExExecutor.executeFunction; +import static org.eclipse.fx.core.function.ExExecutor.executeRunnable; +import static org.eclipse.fx.core.function.ExExecutor.executeSupplier; +import static org.eclipse.fx.core.function.ExExecutor.executeSupplierOrDefault; +import java.io.ByteArrayInputStream; import java.net.URI; +import java.nio.ByteBuffer; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -28,6 +34,8 @@ import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.core.runtime.preferences.IEclipsePreferences; +import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.fx.code.server.jdt.shared.JavaCodeCompleteProposal; import org.eclipse.fx.code.server.jdt.shared.JavaCodeCompleteProposal.Modifier; import org.eclipse.fx.code.server.jdt.shared.JavaCodeCompleteProposal.Type; @@ -46,17 +54,20 @@ import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.core.Signature; import org.eclipse.jdt.core.compiler.IProblem; -import org.eclipse.jdt.launching.JavaRuntime; public class JDTServerImpl { private Map<String, ResourceContainer<?>> openResources = new HashMap<>(); public JDTServerImpl() { - System.err.println(JavaRuntime.getDefaultVMInstall()); +// System.err.println(node.get(ResourcesPlugin.PREF_LIGHTWEIGHT_AUTO_REFRESH,"NIX DA")); +// System.err.println(node.get(ResourcesPlugin.PREF_AUTO_REFRESH,"NIX DA")); + +// System.err.println(JavaRuntime.getDefaultVMInstall()); } public String registerModule(URI uri) { IWorkspace workspace = ResourcesPlugin.getWorkspace(); + Path path = Paths.get(uri).resolve(".project"); try { if( Files.exists(path) ) { @@ -165,11 +176,30 @@ public class JDTServerImpl { } throw new IllegalArgumentException("Unable file '"+moduleName+"' in path '"+path+"'"); } + + public Boolean createFile(String moduleName, String path, ByteBuffer content) { + IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(moduleName); + if( project.exists() ) { + IFile file = project.getFile(new org.eclipse.core.runtime.Path(path)); + if( ! file.exists() ) { + try { + file.create(new ByteArrayInputStream(content.array()), true, null); + return Boolean.TRUE; + } catch (CoreException e) { + throw new IllegalArgumentException("Unable to create new file '"+moduleName+"' in path '"+path+"'", e); + } + } + } + + throw new IllegalArgumentException("Unable to create new file '"+moduleName+"' in path '"+path+"'"); + } + private ResourceContainer<?> createResourceContainer(String moduleName, String path) { if( path.endsWith(".java") ) { IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(moduleName); IFile file = project.getFile(new org.eclipse.core.runtime.Path(path)); +// executeRunnable(() -> file.refreshLocal(IResource.DEPTH_ONE, null), "Failed to synchronize file '"+file+"'"); if( ! file.exists() ) { throw new IllegalStateException("The requested file does not exist"); @@ -538,6 +568,4 @@ public class JDTServerImpl { } } - - }
\ No newline at end of file diff --git a/experimental/compensator/org.eclipse.fx.code.server.jdt/src/org/eclipse/fx/code/server/jdt/JDTServer.java b/experimental/compensator/org.eclipse.fx.code.server.jdt/src/org/eclipse/fx/code/server/jdt/JDTServer.java index 66cd35041..f5d4e739a 100644 --- a/experimental/compensator/org.eclipse.fx.code.server.jdt/src/org/eclipse/fx/code/server/jdt/JDTServer.java +++ b/experimental/compensator/org.eclipse.fx.code.server.jdt/src/org/eclipse/fx/code/server/jdt/JDTServer.java @@ -16,6 +16,7 @@ public interface JDTServer { public Future<Boolean> isManaged(String moduleName, String path); public Future<String> openFile(String moduleName, String path); + public Future<Boolean> createFile(String moduleName, String path, ByteBuffer content); public Future<ByteBuffer> getFileContent(String id); public Future<Boolean> setFileContent(String id, ByteBuffer content); |