Skip to content

Commit 97d7eb4

Browse files
authored
Merge pull request #53 from ErnestOrt/28-ms-from-git
28 ms from git
2 parents 6ace568 + 6cca5b4 commit 97d7eb4

File tree

7 files changed

+205
-44
lines changed

7 files changed

+205
-44
lines changed

trampoline/src/main/java/org/ernest/applications/trampoline/controller/SettingsController.java

+15
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.ernest.applications.trampoline.exceptions.ReadingEcosystemException;
88
import org.ernest.applications.trampoline.exceptions.SavingEcosystemException;
99
import org.ernest.applications.trampoline.services.EcosystemManager;
10+
import org.ernest.applications.trampoline.services.FileManager;
1011
import org.ernest.applications.trampoline.services.GitManager;
1112
import org.springframework.beans.factory.annotation.Autowired;
1213
import org.springframework.stereotype.Controller;
@@ -29,6 +30,9 @@ public class SettingsController {
2930
@Autowired
3031
EcosystemManager ecosystemManager;
3132

33+
@Autowired
34+
FileManager fileManager;
35+
3236
@Autowired
3337
GitManager gitManager;
3438

@@ -42,6 +46,7 @@ public String getSettingsView(Model model) {
4246
model.addAttribute("mavenBinaryLocationMessage", ecosystem.getMavenBinaryLocation() == null ? "Set Maven Binary Location if necessary. Otherwise it will automatically be searched in a bin folder inside your Maven Home Location" : ecosystem.getMavenBinaryLocation());
4347
model.addAttribute("mavenHomeLocationMessage", ecosystem.getMavenHomeLocation() == null ? "Please set maven Home Location. Ex: /Users/ernest/Documents/workspace/tools/apache-maven-3.2.1" : ecosystem.getMavenHomeLocation());
4448
model.addAttribute("gitUsername", gitManager.getRegisteredUsername(ecosystem));
49+
model.addAttribute("settingsFolder", fileManager.getSettingsFolder());
4550

4651
return SETTINGS_VIEW;
4752
}
@@ -61,6 +66,16 @@ public void setNewMicroservice(@RequestParam(value="name") String name, @Request
6166
ecosystemManager.setNewMicroservice(name, pomLocation, defaultPort, actuatorPrefix, vmArguments, buildTool, gitLocation);
6267
}
6368

69+
@RequestMapping(value= "/setnewmicroservice/git", method = RequestMethod.POST)
70+
@ResponseBody
71+
public void setNewMicroserviceFromGit(@RequestParam(value="gitRepo") String gitRepo, @RequestParam(value="destinationFolder") String destinationFolder,
72+
@RequestParam(value="name") String name, @RequestParam(value="pomLocation") String pomLocation,
73+
@RequestParam(value="defaultPort") String defaultPort, @RequestParam(value="actuatorPrefix") String actuatorPrefix,
74+
@RequestParam(value="vmArguments") String vmArguments, @RequestParam(value="buildTool") String buildTool, @RequestParam(value="gitLocation") String gitLocation) throws CreatingSettingsFolderException, ReadingEcosystemException, CreatingMicroserviceScriptException, SavingEcosystemException, GitAPIException {
75+
gitManager.cloneRepository(gitRepo, destinationFolder);
76+
ecosystemManager.setNewMicroservice(name, pomLocation, defaultPort, actuatorPrefix, vmArguments, buildTool, gitLocation);
77+
}
78+
6479
@RequestMapping(value= "/updatemicroservice", method = RequestMethod.POST)
6580
@ResponseBody
6681
public void updateMicroservice(@RequestParam(value="id") String id, @RequestParam(value="pomLocation") String pomLocation,

trampoline/src/main/java/org/ernest/applications/trampoline/services/EcosystemManager.java

+2
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,8 @@ public void updateMicroservice(String id, String pomLocation, String defaultPort
164164
microservice.setVmArguments(vmArguments);
165165
microservice.setGitLocation(gitLocation);
166166

167+
fileManager.createScript(microservice);
168+
167169
fileManager.saveEcosystem(ecosystem);
168170
}
169171

trampoline/src/main/java/org/ernest/applications/trampoline/services/FileManager.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -127,12 +127,16 @@ public void runScript(Microservice microservice, String mavenBinaryLocation, Str
127127
public void createScript(Microservice microservice) throws CreatingMicroserviceScriptException {
128128
try {
129129
if(System.getProperties().getProperty("os.name").contains("Windows")){
130+
try{FileUtils.forceDelete(new File(getSettingsFolder() + "/" + microservice.getId() + ".txt"));}catch (Exception e){}
131+
130132
if(microservice.getBuildTool().equals(BuildTools.MAVEN)) {
131133
FileUtils.writeStringToFile(new File(getSettingsFolder() + "/" + microservice.getId() + ".txt"), ScriptContentsProvider.getMavenWindows(microservice.getPomLocation()));
132134
}else{
133135
FileUtils.writeStringToFile(new File(getSettingsFolder() + "/" + microservice.getId() + ".txt"), ScriptContentsProvider.getGradleWindows(microservice.getPomLocation()));
134136
}
135137
}else{
138+
try{FileUtils.forceDelete(new File(getSettingsFolder() + "/" + microservice.getId() + ".sh"));}catch (Exception e){}
139+
136140
if(microservice.getBuildTool().equals(BuildTools.MAVEN)) {
137141
FileUtils.writeStringToFile(new File(getSettingsFolder() + "/" + microservice.getId() + ".sh"),ScriptContentsProvider.getMavenUnix(microservice.getPomLocation()));
138142
}else{
@@ -145,7 +149,7 @@ public void createScript(Microservice microservice) throws CreatingMicroserviceS
145149
}
146150
}
147151

148-
private String getSettingsFolder() {
152+
public String getSettingsFolder() {
149153

150154
if(System.getProperties().getProperty("os.name").contains("Mac")){
151155
return settingsFolderPathMac.replaceAll("#userName", System.getProperties().getProperty("user.name"));

trampoline/src/main/java/org/ernest/applications/trampoline/services/GitManager.java

+12
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.ernest.applications.trampoline.services;
22

3+
import org.eclipse.jgit.api.CloneCommand;
34
import org.eclipse.jgit.api.CreateBranchCommand;
45
import org.eclipse.jgit.api.Git;
56
import org.eclipse.jgit.api.ListBranchCommand;
@@ -14,6 +15,7 @@
1415
import org.springframework.beans.factory.annotation.Autowired;
1516
import org.springframework.stereotype.Component;
1617

18+
import java.io.File;
1719
import java.io.IOException;
1820
import java.util.stream.Collectors;
1921

@@ -78,6 +80,16 @@ public void cleanCred() {
7880
ecosystemManager.cleanGitCred();
7981
}
8082

83+
public void cloneRepository(String gitUrl, String destinationFolder) throws GitAPIException {
84+
Ecosystem ecosystem = ecosystemManager.getEcosystem();
85+
CloneCommand cloneCommand = Git.cloneRepository();
86+
87+
if(ecosystem.getGitCredentials()!=null){
88+
cloneCommand.setCredentialsProvider(buildCredentialsProvider(ecosystem.getGitCredentials())).call();
89+
}
90+
cloneCommand.setURI(gitUrl).setDirectory(new File(destinationFolder)).call();
91+
}
92+
8193
private UsernamePasswordCredentialsProvider buildCredentialsProvider(GitCredentials gitCredentials) {
8294
return new UsernamePasswordCredentialsProvider(encryptService.decrypt(gitCredentials.getUsername()), encryptService.decrypt(gitCredentials.getPass()));
8395
}

trampoline/src/main/resources/static/v2/js/app/settings.js

+87-40
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,13 @@ function setNewMicroservice(){
5959
if($("#input-hidden-mavenhomelocation").val() == '' && $("#input-newmicroservice-build-tool").val() == 'maven'){
6060
$("#form-mavenhomelocation").addClass("has-error");
6161
}else{
62-
cleaningNewMicroserviceFrom();
63-
if($("#input-newmicroservice-name").val() == '' || $("#input-newmicroservice-pomlocation").val() == '' || $("#input-newmicroservice-defaultport").val() == '' || $("#input-newmicroservice-build-tool").val() == '-1'){
64-
checkEachNewMicroserviceFromField();
65-
}else{
62+
var fieldsToCheck = [];
63+
fieldsToCheck.push("newmicroservice-name");
64+
fieldsToCheck.push("newmicroservice-pomlocation");
65+
fieldsToCheck.push("newmicroservice-defaultport");
66+
fieldsToCheck.push("newmicroservice-build-tool");
67+
68+
if(!cheackEmptyValuesForm(fieldsToCheck)){
6669
$('.front-loading').show();
6770
$.ajax({
6871
url : "/settings/setnewmicroservice",
@@ -81,41 +84,6 @@ function setNewMicroservice(){
8184
}
8285
}
8386

84-
function cleaningNewMicroserviceFrom(){
85-
$("#form-newmicroservice-name").removeClass("has-error");
86-
$("#form-newmicroservice-pomlocation").removeClass("has-error");
87-
$("#form-newmicroservice-defaultport").removeClass("has-error");
88-
$("#form-newmicroservice-build-tool").removeClass("has-error");
89-
90-
$("#form-newmicroservice-name").removeClass("has-success");
91-
$("#form-newmicroservice-pomlocation").removeClass("has-success");
92-
$("#form-newmicroservice-defaultport").removeClass("has-success");
93-
$("#form-newmicroservice-build-tool").removeClass("has-success");
94-
}
95-
96-
function checkEachNewMicroserviceFromField(){
97-
if($("#input-newmicroservice-name").val() == ''){
98-
$("#form-newmicroservice-name").addClass("has-error");
99-
}else{
100-
$("#form-newmicroservice-name").addClass("has-success");
101-
}
102-
if($("#input-newmicroservice-pomlocation").val() == ''){
103-
$("#form-newmicroservice-pomlocation").addClass("has-error");
104-
}else{
105-
$("#form-newmicroservice-pomlocation").addClass("has-success");
106-
}
107-
if($("#input-newmicroservice-defaultport").val() == ''){
108-
$("#form-newmicroservice-defaultport").addClass("has-error");
109-
}else{
110-
$("#form-newmicroservice-defaultport").addClass("has-success");
111-
}
112-
if($("#input-newmicroservice-build-tool").val() == '-1'){
113-
$("#form-newmicroservice-build-tool").addClass("has-error");
114-
}else{
115-
$("#form-newmicroservice-build-tool").addClass("has-success");
116-
}
117-
}
118-
11987
function removeMicroservice(microserviceId){
12088
$('.front-loading').show();
12189
$.ajax({
@@ -350,4 +318,83 @@ function showNotification(notificationType, notificationMessage){
350318

351319
$(document).ready(function(){
352320
$('[data-toggle="git-popover"]').popover();
353-
});
321+
$("#tab-newmicroservice-git-repo").addClass("active");
322+
$('#content-file-system').hide();
323+
});
324+
325+
function showNewMsForm(component){
326+
$('#content-file-system').hide();
327+
$('#content-newmicroservice-git-repo').hide();
328+
$('#content-'+component).show();
329+
330+
$("#tab-newmicroservice-git-repo").removeClass("active");
331+
$("#tab-file-system").removeClass("active");
332+
$("#tab-"+component).addClass("active");
333+
}
334+
335+
function fillFormGitNewMs(){
336+
var girUrl =$('#input-git-newmicroservice-repo').val();
337+
var repoName = girUrl.split("/")[girUrl.split("/").length-1].replace('.git','');
338+
339+
$('#input-git-newmicroservice-name').val(repoName);
340+
$('#input-git-newmicroservice-destination').val(settingsFolder+"/"+repoName);
341+
$('#input-git-newmicroservice-pomlocation').val(settingsFolder+"/"+repoName);
342+
$('#input-git-newmicroservice-gitLocation').val(settingsFolder+"/"+repoName);
343+
}
344+
345+
function setNewMicroserviceFromGit(){
346+
var fieldsToCheck = [];
347+
fieldsToCheck.push("git-newmicroservice-repo");
348+
fieldsToCheck.push("git-newmicroservice-destination");
349+
fieldsToCheck.push("git-newmicroservice-name");
350+
fieldsToCheck.push("git-newmicroservice-pomlocation");
351+
fieldsToCheck.push("git-newmicroservice-defaultport");
352+
fieldsToCheck.push("git-newmicroservice-build-tool");
353+
fieldsToCheck.push("git-newmicroservice-gitLocation");
354+
355+
if($("#input-hidden-mavenhomelocation").val() == '' && $("#input-newmicroservice-build-tool").val() == 'maven'){
356+
$("#form-mavenhomelocation").addClass("has-error");
357+
}else{
358+
if(!cheackEmptyValuesForm(fieldsToCheck)){
359+
$('.front-loading').show();
360+
$.ajax({
361+
url : "/settings/setnewmicroservice/git",
362+
type: "POST",
363+
data : {gitRepo: $('#input-git-newmicroservice-repo').val(),
364+
destinationFolder: $('#input-git-newmicroservice-destination').val(),
365+
name: $("#input-git-newmicroservice-name").val(),
366+
pomLocation: $("#input-git-newmicroservice-pomlocation").val(),
367+
defaultPort: $("#input-git-newmicroservice-defaultport").val(),
368+
actuatorPrefix: $("#input-git-newmicroservice-actuatorprefix").val(),
369+
vmArguments: $("#input-git-newmicroservice-vmarguments").val(),
370+
buildTool: $("#input-git-newmicroservice-build-tool").val(),
371+
gitLocation: $("#input-git-newmicroservice-gitLocation").val()},
372+
success: function(data, textStatus, jqXHR) { location.reload(); },
373+
error: function (request, status, error) {
374+
$('.front-loading').hide();
375+
showNotification('danger', "Error occurred when trying to register a microservice. Check Logs for more info");
376+
377+
}
378+
});
379+
}
380+
}
381+
}
382+
383+
function cheackEmptyValuesForm(fieldsToCheck){
384+
var errors = false;
385+
fieldsToCheck.forEach(function(field) {
386+
$("#form-" + field).removeClass("has-error");
387+
$("#form-" + field).removeClass("has-success");
388+
389+
if($("#input-" + field).val() == '' || $("#input-" + field).val() == '-1'){
390+
errors = true
391+
$("#form-" + field).addClass("has-error");
392+
}else{
393+
$("#form-" + field).addClass("has-success");
394+
}
395+
});
396+
397+
return errors;
398+
}
399+
400+

trampoline/src/main/resources/templates/fragments/menu.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
<li>
3838
<a href="https://github.com/ErnestOrt/Trampoline">
3939
<i class="ti-github"></i>
40-
<p>Project Repo</p>
40+
<p>Trampoline Repo</p>
4141
</a>
4242
</li>
4343
<li>

trampoline/src/main/resources/templates/settings.html

+83-2
Original file line numberDiff line numberDiff line change
@@ -157,9 +157,84 @@ <h4 class="title">GIT Settings <i class="fa fa-info-circle" data-toggle="git-pop
157157
<div class="card">
158158
<div class="header">
159159
<h4 class="title">Register Microservice</h4>
160+
<br/>
160161
</div>
161-
<div class="content">
162+
<ul class="nav nav-tabs">
163+
<li role="presentation" id="tab-newmicroservice-git-repo" onclick="showNewMsForm('newmicroservice-git-repo')"><a>GIT Repo</a></li>
164+
<li role="presentation" id="tab-file-system" onclick="showNewMsForm('file-system')"><a>File System</a></li>
165+
</ul>
166+
<div id="content-newmicroservice-git-repo" class="content">
167+
<div class="row">
168+
<div class="col-md-6">
169+
<div class="form-group" id="form-git-newmicroservice-repo">
170+
<label>GIT Repo</label>
171+
<input id="input-git-newmicroservice-repo" onchange="fillFormGitNewMs()" type="text" class="form-control border-input" placeholder="Ex: https://github.com/ErnestOrt/Trampoline.git"/>
172+
</div>
173+
</div>
174+
<div class="col-md-6">
175+
<div class="form-group" id="form-git-newmicroservice-destination">
176+
<label>Destination Folder</label>
177+
<input id="input-git-newmicroservice-destination" type="text" class="form-control border-input" placeholder="Ex: C:\Users\Trampoline\Documents\workarea"/>
178+
</div>
179+
</div>
180+
<div class="col-md-5">
181+
<div class="form-group" id="form-git-newmicroservice-name">
182+
<label>Name *</label>
183+
<input id="input-git-newmicroservice-name" type="text" class="form-control border-input" placeholder="Ex: microservice-1"/>
184+
</div>
185+
</div>
186+
<div class="col-md-2">
187+
<div class="form-group" id="form-git-newmicroservice-build-tool">
188+
<label>Build Tool *</label>
189+
<select id="input-git-newmicroservice-build-tool" class="form-control border-input">
190+
<option value="-1">Select...</option>
191+
<option value="maven">Maven</option>
192+
<option value="gradle">Gradle</option>
193+
</select>
194+
</div>
195+
</div>
196+
<div class="col-md-2">
197+
<div class="form-group" id="form-git-newmicroservice-defaultport">
198+
<label>Default Port *</label>
199+
<input id="input-git-newmicroservice-defaultport" type="text" class="form-control border-input" placeholder="Ex: 9988"/>
200+
</div>
201+
</div>
202+
<div class="col-md-3">
203+
<div class="form-group" id="form-git-newmicroservice-actuatorprefix">
204+
<label>Actuator Prefix</label>
205+
<input id="input-git-newmicroservice-actuatorprefix" type="email" class="form-control border-input" placeholder="Ex: /service-one"/>
206+
</div>
207+
</div>
208+
</div>
209+
<div class="row">
210+
<div class="col-md-6">
211+
<div class="form-group" id="form-git-newmicroservice-pomlocation">
212+
<label>Pom or Build File Location *</label>
213+
<input id="input-git-newmicroservice-pomlocation" type="text" class="form-control border-input" placeholder="Ex: /Users/ernest/Documents/workarea/microservice-1" />
214+
</div>
215+
</div>
216+
<div class="col-md-6">
217+
<div class="form-group" id="form-git-newmicroservice-gitLocation">
218+
<label>Git Repo Root Location</label>
219+
<input id="input-git-newmicroservice-gitLocation" type="text" class="form-control border-input" placeholder="Ex: /Users/ernest/Documents/workarea/microservice-1"/>
220+
</div>
221+
</div>
222+
</div>
223+
<div class="row">
162224

225+
<div class="col-md-12">
226+
<div class="form-group" id="form-git-newmicroservice-vmarguments">
227+
<label>VM Arguments</label>
228+
<input id="input-git-newmicroservice-vmarguments" type="text" class="form-control border-input" placeholder="Ex: -Dmy.arg.one=false -Dmy.arg.two=true"/>
229+
</div>
230+
</div>
231+
</div>
232+
<div class="text-center">
233+
<button onclick="setNewMicroserviceFromGit()" class="btn btn-success btn-fill btn-wd">Clone and Register Microservice</button>
234+
</div>
235+
<div class="clearfix"></div>
236+
</div>
237+
<div id="content-file-system" class="content">
163238
<div class="row">
164239
<div class="col-md-5">
165240
<div class="form-group" id="form-newmicroservice-name">
@@ -343,9 +418,15 @@ <h4 class="modal-title">Microservices Group Information</h4>
343418
<script type="text/javascript" th:src="@{/v2/js/bootstrap-notify.js}"></script>
344419
<script type="text/javascript" th:src="@{/v2/js/paper-dashboard.js}"></script>
345420
<script type="text/javascript" th:src="@{/v2/js/demo.js}"></script>
346-
<script type="text/javascript" th:src="@{/v2/js/app/settings.js?v3.10}"></script>
421+
<script type="text/javascript" th:src="@{/v2/js/app/settings.js?v3.11}"></script>
347422
<script type="text/javascript" th:src="@{/v2/js/app/loading.js?v3.7}"></script>
348423

424+
<script th:inline="javascript">
425+
/*<![CDATA[*/
426+
var settingsFolder = [[${settingsFolder}]]
427+
/*]]>*/
428+
</script>
429+
349430

350431

351432
</html>

0 commit comments

Comments
 (0)