Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,9 @@

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*

# Compile files
target/

# lenra cli files
.lenra/
3 changes: 1 addition & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,7 @@ To download it, you can use cargo or download the binary via the [latest github
From cargo you need to run the following command :

```bash
cargo install lenra_cli --version=1.0.0-beta.5
# or `cargo install lenra_cli@1.0.0-beta.5`
cargo install --git https://github.com/lenra-io/lenra_cli.git
```

When installed you can run the binary file
Expand Down
33 changes: 33 additions & 0 deletions lenra.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
componentsApi: "1.0"
generator:
dofigen:
builders:
- name: builder
image: maven:3-openjdk-17-slim
workdir: /app
adds:
- "."
script:
- mvn package
- mv target/*.jar /tmp/
caches:
- /root/.m2
- /app/target
image: bitnami/java:17
envs:
LOG_LEVEL: debug
workdir: /app
artifacts:
- builder: builder
source: "/tmp/*.jar"
destination: "/app/"
cmd:
- java
- -jar
- template-0.0.1-SNAPSHOT.jar
ports:
- 3000
ignores:
- "**"
- "!/src/**"
- "!/pom.xml"
53 changes: 53 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>lenra</groupId>
<artifactId>template</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>template</name>
<description>Lenra SpringBoot Template</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
</exclusion>
</exclusions>
</dependency>

<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.10.2</version>
</dependency>

<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10</version>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>
34 changes: 34 additions & 0 deletions src/main/java/io/lenra/application/Manifest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package io.lenra.application;

import java.util.HashMap;
import java.util.Map;

import io.lenra.application.listeners.Increment;
import io.lenra.application.listeners.OnEnvStart;
import io.lenra.application.listeners.OnUserFirstJoin;
import io.lenra.application.widgets.*;
import io.lenra.template.object.Listener;
import io.lenra.template.object.Widget;;

public class Manifest {
public static Map<String, Widget> widgets = new HashMap<String, Widget>() {
{
put("userData", new UserData());
put("menu", new Menu());
put("main", new Main());
put("home", new Home());
put("counter", new Counter());
}
};

public static Map<String, Listener> listeners = new HashMap<String, Listener>() {
{
put("increment", new Increment());
put("onEnvStart", new OnEnvStart());
put("onUserFirstJoin", new OnUserFirstJoin());
}
};

public static String rootWidget = "main";

}
17 changes: 17 additions & 0 deletions src/main/java/io/lenra/application/listeners/Increment.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package io.lenra.application.listeners;

import com.google.gson.JsonObject;

import io.lenra.application.services.CounterApi;
import io.lenra.template.object.Listener;
import io.lenra.application.utils.Counter;

public class Increment implements Listener {
private CounterApi counterApi = new CounterApi();

public void run(JsonObject props, JsonObject event, JsonObject api) {
Counter counter = counterApi.getCounter(api, props.get("id").getAsString());
counter.setCount(counter.getCount() + 1);
counterApi.updateCounter(api, counter);
}
}
24 changes: 24 additions & 0 deletions src/main/java/io/lenra/application/listeners/OnEnvStart.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package io.lenra.application.listeners;

import com.google.gson.JsonArray;
import com.google.gson.JsonObject;

import io.lenra.application.utils.Counter;
import io.lenra.application.services.CounterApi;
import io.lenra.template.object.Listener;

public class OnEnvStart implements Listener {
private CounterApi counterApi = new CounterApi();

public void run(JsonObject props, JsonObject event, JsonObject api) {
JsonObject query = new JsonObject();
query.addProperty("user", "global");
JsonArray counters = counterApi.executeQuery(api, "counter", query);

if (counters.size() == 0) {
Counter newCounter = new Counter(0, "global");
counterApi.createCounter(api, newCounter);
}
}

}
24 changes: 24 additions & 0 deletions src/main/java/io/lenra/application/listeners/OnUserFirstJoin.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package io.lenra.application.listeners;

import com.google.gson.JsonArray;
import com.google.gson.JsonObject;

import io.lenra.application.utils.Counter;
import io.lenra.application.services.CounterApi;
import io.lenra.template.object.Listener;

public class OnUserFirstJoin implements Listener {
private CounterApi counterApi = new CounterApi();

public void run(JsonObject props, JsonObject event, JsonObject api) {
JsonObject query = new JsonObject();
query.addProperty("user", "@me");
JsonArray counters = counterApi.executeQuery(api, "counter", query);

if (counters.size() == 0) {
Counter newCounter = new Counter(0, "@me");
counterApi.createCounter(api, newCounter);
}
}

}
59 changes: 59 additions & 0 deletions src/main/java/io/lenra/application/services/CounterApi.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package io.lenra.application.services;

import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.web.client.RestTemplate;

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;

import io.lenra.application.utils.Counter;

public class CounterApi {
private final RestTemplate restTemplate;

public CounterApi() {
this.restTemplate = new RestTemplateBuilder().build();
}

public Counter getCounter(JsonObject api, String id) {
String url = api.get("url").getAsString() + "/app/colls/counter/docs/" + id;
return this.restTemplate.exchange(url, HttpMethod.GET, createHeader(api, ""), Counter.class)
.getBody();
}

public JsonObject createCounter(JsonObject api, Counter newCounter) {
Gson gson = new Gson();
String url = api.get("url").getAsString() + "/app/colls/counter/docs";
return this.restTemplate
.exchange(url, HttpMethod.POST, createHeader(api, gson.toJson(newCounter, Counter.class)),
JsonObject.class)
.getBody();
}

public Counter updateCounter(JsonObject api, Counter newCounter) {
Gson gson = new Gson();
String url = api.get("url").getAsString() + "/app/colls/counter/docs/" + newCounter.getId();
return this.restTemplate
.exchange(url, HttpMethod.PUT, createHeader(api, gson.toJson(newCounter, Counter.class)), Counter.class)
.getBody();
}

public JsonArray executeQuery(JsonObject api, String coll, JsonObject query) {
String url = api.get("url").getAsString() + "/app/colls/" + coll + "/docs/find";
return this.restTemplate.exchange(url, HttpMethod.POST, createHeader(api, query.toString()), JsonArray.class)
.getBody();
}

private HttpEntity<String> createHeader(JsonObject api, String body) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.add("Authorization", "Bearer " + api.get("token").getAsString());
HttpEntity<String> entity = new HttpEntity<String>(body, headers);
return entity;
}
}
31 changes: 31 additions & 0 deletions src/main/java/io/lenra/application/utils/Counter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package io.lenra.application.utils;

public class Counter {
private String _id;
private int count;
private String user;

public Counter(int count, String user) {
this.count = count;
this.user = user;
}

public void setCount(int count) {
this.count = count;
}

public int getCount() {
return this.count;
}

public String getId() {
return this._id;
}

public String toString() {
return "{\"_id\" => " + _id + ", \"count\" => " + count
+ ", \"user\" => "
+ user + "}";
}

}
50 changes: 50 additions & 0 deletions src/main/java/io/lenra/application/widgets/Counter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package io.lenra.application.widgets;

import java.util.LinkedList;
import java.util.List;

import com.google.gson.JsonArray;
import com.google.gson.JsonObject;

import io.lenra.template.object.Widget;
import io.lenra.components.ButtonSchema;
import io.lenra.components.FlexSchema;
import io.lenra.components.ListenerSchema;
import io.lenra.components.TextSchema;
import io.lenra.components.FlexSchema.CrossAxisAlignment;
import io.lenra.components.FlexSchema.MainAxisAlignment;

public class Counter implements Widget {

public Object render(JsonArray data, JsonObject props,
JsonObject context) {
System.out.println(data);
List<Object> child_list = new LinkedList<Object>();

String counterText = props.get("text").getAsString()
+ ": " +
data.get(0).getAsJsonObject().get("count").getAsString();

child_list.add(new TextSchema()
.withType(TextSchema.Type.TEXT)
.withValue(counterText));

JsonObject Props = new JsonObject();
Props.addProperty("id", data.get(0).getAsJsonObject().get("_id").getAsString());

child_list.add(new ButtonSchema()
.withType(ButtonSchema.Type.BUTTON)
.withText("+")
.withOnPressed(new ListenerSchema()
.withAction("increment")
.withProps(Props)));

return new FlexSchema()
.withType(FlexSchema.Type.FLEX)
.withSpacing(16.0)
.withMainAxisAlignment(MainAxisAlignment.SPACE_EVENLY)
.withCrossAxisAlignment(CrossAxisAlignment.CENTER)
.withChildren(child_list);
};

}
Loading