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
8 changes: 8 additions & 0 deletions spring_boot_dynamic_forms/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
/target
/.settings
/logs_and_files
/war
.classpath
.project
/.sonar
.springBeans
Empty file.
110 changes: 110 additions & 0 deletions spring_boot_dynamic_forms/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
<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 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.formbuilder</groupId>
<artifactId>form_builder</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>RESTfulExample Maven Webapp</name>
<url>http://maven.apache.org</url>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.0.RELEASE</version>
</parent>

<dependencies>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>

<!-- Spring Data MongoDB -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
</dependency>

<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>20030203.000129</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.14.8</version>
</dependency>
</dependencies>

<build>
<finalName>form_builder</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.4.RELEASE</version>
</dependency>
</dependencies>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>

</plugins>
</build>

<repositories>
<repository>
<id>spring-libs-snapshot</id>
<url>https://repo.spring.io/libs-snapshot</url>
</repository>
</repositories>

<pluginRepositories>
<pluginRepository>
<id>spring-libs-snapshot</id>
<url>https://repo.spring.io/libs-snapshot</url>
</pluginRepository>
</pluginRepositories>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.formbuilder;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.embedded.ServletRegistrationBean;
import org.springframework.boot.context.web.SpringBootServletInitializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.DispatcherServlet;

@EnableAutoConfiguration
@Configuration
@ComponentScan
public class Application extends SpringBootServletInitializer {

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}

public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}

@Bean
public DispatcherServlet dispatcherServlet() {
return new DispatcherServlet();
}

@Bean
public ServletRegistrationBean dispatcherServletRegistration() {
ServletRegistrationBean registration = new ServletRegistrationBean(
dispatcherServlet(), "/*");
registration
.setName(DispatcherServletAutoConfiguration.DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME);
return registration;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package com.formbuilder;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import org.json.simple.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.formbuilder.dao.FormInformation;

@RestController
@EnableAutoConfiguration
public class DynamicController {

@Autowired
private FormInformationService formTemplatesService;

@RequestMapping("/getDataList/{formName}")
public List<FormInformation> getDataList(@PathVariable("formName") String formName) throws Exception {
return formTemplatesService.findAllDataByNames(formName);
}

@RequestMapping("/getTemplateList")
public List<String> getTemplateList() throws Exception {
return formTemplatesService.findAllFormTemplates();
}

@RequestMapping("/getFormData/{formName}/{dataid}")
public Map<String, Object> getFormData(@PathVariable("formName") String formName, @PathVariable("dataid") String dataid)
throws JsonParseException, JsonMappingException, IOException {
return formTemplatesService.getData(formName, dataid);
}

@RequestMapping("/getDesignOfForm/{formName}")
public FormInformation getDesignOfForm(@PathVariable("formName") String formName) throws JsonParseException, JsonMappingException,
IOException {
return formTemplatesService.findTemplateByName(formName);
}

@RequestMapping(value = "/saveDesignOfForm", method = RequestMethod.POST)
public void saveDesignOfForm(@RequestBody FormInformation input) {
formTemplatesService.save(input);
}

@RequestMapping(value = "/saveForm", method = RequestMethod.POST)
public void saveForm(@RequestBody JSONObject input, @RequestParam("formid") String formId, @RequestParam("dataid") String dataId) {
formTemplatesService.save(input, formId, dataId);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.formbuilder;

import java.util.stream.Stream;

import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.repository.CrudRepository;

import com.formbuilder.dao.FormInformation;


public interface FormInformationRepository extends CrudRepository<FormInformation, Long> {

@Query(value = "{\"type\": \"template\"}, {\"_id\":1, \"rootnode.id\" : 1 }")
Stream<FormInformation> findAllFormTemplates();

@Query(value = "{\"type\": \"template\", \"rootnode._id\" : ?0} }")
FormInformation findTemplateByName(String name);

@Query(value = "{\"type\": \"data\", \"rootnode._id\" : ?0}, {\"_id\":1, \"rootnode.id\" : 1 }")
Stream<FormInformation> findAllFormData(String formName);

@Query(value = "{\"type\": \"data\", \"rootnode._id\" : ?0, \"_id\": ?1}, {\"_id\":1, \"rootnode.id\" : 1 }")
FormInformation findFormData(String formName, String id);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package com.formbuilder;

import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import lombok.val;

import org.json.simple.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.formbuilder.dao.FormInformation;

@Service
public class FormInformationService {

private final FormInformationRepository repository;

@Autowired
public FormInformationService(FormInformationRepository repository) {
this.repository = repository;
}

public void deleteAll() {
repository.deleteAll();
}

public List<String> findAllFormTemplates() throws Exception {
return repository.findAllFormTemplates().map(x -> x.getRootnode().getId()).collect(Collectors.toList());
}

public void save(FormInformation formTemplate) {
formTemplate.setType("template");
repository.save(formTemplate);
}

public FormInformation findTemplateByName(String name) {
return repository.findTemplateByName(name);
}

public void save(JSONObject input, String formName, String dataId) {
val formTemplate = dataId.equals("0") ? findTemplateByName(formName) : repository.findFormData(formName, dataId);

if(dataId.equals("0")){
formTemplate.setId(null);
formTemplate.setType("data");
}
//combine formTemplate and input
Utils.combineFormDataAndInput(formTemplate, input);
repository.save(formTemplate);
}

public Map<String, Object> getData(String formName, String dataid) throws JsonParseException, JsonMappingException, IOException {
val root = dataid.equals("0") ? findTemplateByName(formName) : repository.findFormData(formName, dataid);
return Utils.convertAttributeToUi(root);
}

public List<FormInformation> findAllDataByNames(String formName) {
return repository.findAllFormData(formName).collect(Collectors.toList());
}
}
Loading