Add map metadata.

This commit is contained in:
Paulo Gustavo Veiga 2024-02-07 18:44:33 -08:00
parent 885de4e1c1
commit 05c2e545ae
13 changed files with 124 additions and 260 deletions

View File

@ -4,7 +4,7 @@
<parent> <parent>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId> <artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.1</version> <version>3.2.2</version>
</parent> </parent>
<groupId>org.wisemapping</groupId> <groupId>org.wisemapping</groupId>
@ -199,7 +199,6 @@
</dependency> </dependency>
</dependencies> </dependencies>
<build> <build>
<plugins> <plugins>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>

View File

@ -1,7 +1,6 @@
package com.wisemapping; package com.wisemapping;
import com.wisemapping.config.common.CommonConfig; import com.wisemapping.config.common.CommonConfig;
import com.wisemapping.config.mvc.MvcAppConfig;
import com.wisemapping.config.rest.RestAppConfig; import com.wisemapping.config.rest.RestAppConfig;
import org.springframework.boot.WebApplicationType; import org.springframework.boot.WebApplicationType;
import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.builder.SpringApplicationBuilder;

View File

@ -1,43 +0,0 @@
/*
* Copyright [2022] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
* "powered by wisemapping" text requirement on every single page;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the license at
*
* http://www.wisemapping.org/license
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.wisemapping.config.mvc;
import com.wisemapping.filter.RequestPropertiesInterceptor;
import com.wisemapping.filter.UserLocaleInterceptor;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
//@Configuration
//@ComponentScan(basePackageClasses = UserLocaleInterceptor.class)
public class InterceptorsConfig implements WebMvcConfigurer {
@Autowired
private UserLocaleInterceptor userLocaleInterceptor;
@Autowired
private RequestPropertiesInterceptor requestPropertiesInterceptor;
@Override
public void addInterceptors(@NotNull final InterceptorRegistry registry) {
registry.addInterceptor(userLocaleInterceptor);
registry.addInterceptor(requestPropertiesInterceptor);
}
}

View File

@ -1,49 +0,0 @@
package com.wisemapping.config.mvc;
import com.wisemapping.webmvc.MvcMindmapController;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;
//@SpringBootApplication
//@Import({MvcMindmapController.class, MvcSecurityConfig.class})
//@EnableWebMvc
public class MvcAppConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry
.addResourceHandler("/**")
.addResourceLocations("classpath:/public/");
}
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/jsp/");
resolver.setSuffix(".jsp");
resolver.setViewClass(JstlView.class);
return resolver;
}
@Bean
HandlerExceptionResolver errorHandler() {
final SimpleMappingExceptionResolver result = new SimpleMappingExceptionResolver();
//mapping status code with view response.
result.addStatusCode("reactInclude", 403);
//setting default error view
result.setDefaultErrorView("reactInclude");
result.setDefaultStatusCode(500);
return result;
}
}

View File

@ -1,100 +0,0 @@
package com.wisemapping.config.mvc;
import org.jetbrains.annotations.NotNull;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.servlet.util.matcher.MvcRequestMatcher;
import org.springframework.web.servlet.handler.HandlerMappingIntrospector;
@Configuration
@EnableWebSecurity
public class MvcSecurityConfig {
@Bean
@Order(1)
public SecurityFilterChain embeddedDisabledXOrigin(@NotNull final HttpSecurity http, @NotNull final MvcRequestMatcher.Builder mvc) throws Exception {
http
.securityMatchers((matchers) ->
matchers.requestMatchers(mvc.pattern("/c/maps/*/embed")))
.authorizeHttpRequests(
(auth) -> auth.requestMatchers(mvc.pattern(("/c/maps/*/embed"))).permitAll())
.headers((header -> header.frameOptions()
.disable()
))
.csrf(AbstractHttpConfigurer::disable);
return http.build();
}
@Bean
MvcRequestMatcher.Builder mvc(HandlerMappingIntrospector introspector) {
return new MvcRequestMatcher.Builder(introspector);
}
@Bean
@Order(2)
public SecurityFilterChain mvcFilterChain(@NotNull final HttpSecurity http, @NotNull final MvcRequestMatcher.Builder mvc) throws Exception {
http
.securityMatchers((matchers) ->
matchers.requestMatchers(mvc.pattern("/c/**")))
.authorizeHttpRequests(
(auth) ->
auth
.requestMatchers(mvc.pattern("/c/login")).permitAll()
.requestMatchers(mvc.pattern("/c/logout")).permitAll()
.requestMatchers(mvc.pattern("/c/registration")).permitAll()
.requestMatchers(mvc.pattern("/c/registration-success")).permitAll()
.requestMatchers(mvc.pattern("/c/registration-google")).permitAll()
.requestMatchers(mvc.pattern("/c/forgot-password")).permitAll()
.requestMatchers(mvc.pattern("/c/forgot-password-success")).permitAll()
.requestMatchers(mvc.pattern("/c/maps/*/try")).permitAll()
.requestMatchers(mvc.pattern("/c/maps/*/public")).permitAll()
.requestMatchers(mvc.pattern("/c/**")).hasAnyRole("USER", "ADMIN")
.anyRequest().authenticated())
.formLogin((loginForm) ->
loginForm.loginPage("/c/login")
.loginProcessingUrl("/c/perform-login")
.defaultSuccessUrl("/c/maps/")
.failureUrl("/c/login?login_error=2"))
.logout((logout) ->
logout
.logoutUrl("/c/logout")
.logoutSuccessUrl("/c/login")
.invalidateHttpSession(true)
.deleteCookies("JSESSIONID")
.permitAll()
).rememberMe(remember ->
remember
.tokenValiditySeconds(2419200)
.rememberMeParameter("remember-me"
)
).headers((header -> header.frameOptions()
.disable()
))
.csrf((csrf) ->
csrf.ignoringRequestMatchers(mvc.pattern("/c/logout")));
return http.build();
}
@Bean
@Order(3)
public SecurityFilterChain shareResourcesFilterChain(@NotNull final HttpSecurity http, @NotNull final MvcRequestMatcher.Builder mvc) throws Exception {
return http.authorizeHttpRequests(
(auth) ->
auth.requestMatchers(mvc.pattern("/static/**")).permitAll().
requestMatchers(mvc.pattern("/css/**")).permitAll().
requestMatchers(mvc.pattern("/js/**")).permitAll().
// @todo: Why this is required ...
requestMatchers(mvc.pattern("/WEB-INF/jsp/*.jsp")).permitAll().
requestMatchers(mvc.pattern("/images/**")).permitAll().
requestMatchers(mvc.pattern("/*")).permitAll()
).build();
}
}

View File

@ -54,7 +54,7 @@ public class RestAppConfig {
})) }))
.csrf(AbstractHttpConfigurer::disable) .csrf(AbstractHttpConfigurer::disable)
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
// .httpBasic(withDefaults()) .httpBasic(withDefaults())
.build(); .build();
} }
} }

View File

@ -24,6 +24,7 @@ import com.wisemapping.rest.model.*;
import com.wisemapping.security.Utils; import com.wisemapping.security.Utils;
import com.wisemapping.service.*; import com.wisemapping.service.*;
import com.wisemapping.validator.MapInfoValidator; import com.wisemapping.validator.MapInfoValidator;
import com.wisemapping.view.MindMapBean;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.validator.routines.EmailValidator; import org.apache.commons.validator.routines.EmailValidator;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
@ -32,6 +33,7 @@ import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
@ -72,7 +74,7 @@ public class MindmapController extends BaseController {
@RequestMapping(method = RequestMethod.GET, value = "/{id}", produces = {"application/json"}) @RequestMapping(method = RequestMethod.GET, value = "/{id}", produces = {"application/json"})
@ResponseBody @ResponseBody
public RestMindmap retrieve(@PathVariable int id) throws WiseMappingException { public RestMindmap retrieve(@PathVariable int id) throws WiseMappingException {
final User user = Utils.getUser(); final User user = Utils.getUser(true);
final Mindmap mindMap = findMindmapById(id); final Mindmap mindMap = findMindmapById(id);
return new RestMindmap(mindMap, user); return new RestMindmap(mindMap, user);
} }
@ -80,17 +82,28 @@ public class MindmapController extends BaseController {
@PreAuthorize("isAuthenticated() and hasRole('ROLE_USER')") @PreAuthorize("isAuthenticated() and hasRole('ROLE_USER')")
@RequestMapping(method = RequestMethod.GET, value = "/{id}/metadata", produces = {"application/json"}) @RequestMapping(method = RequestMethod.GET, value = "/{id}/metadata", produces = {"application/json"})
@ResponseBody @ResponseBody
public RestMindmap retrieveMetadata(@PathVariable int id) throws WiseMappingException { public RestMindmapMetadata retrieveMetadata(@PathVariable int id) throws WiseMappingException {
final User user = Utils.getUser(); final User user = Utils.getUser(true);
final Mindmap mindmap = findMindmapById(id);
final Mindmap mindMap = findMindmapById(id); final MindMapBean mindMapBean = new MindMapBean(mindmap, user);
return new RestMindmap(mindMap, user);
// Is the mindmap locked ?.
boolean isLocked = false;
final LockManager lockManager = this.mindmapService.getLockManager();
String lockFullName = null;
if (lockManager.isLocked(mindmap) && !lockManager.isLockedBy(mindmap, user)) {
final LockInfo lockInfo = lockManager.getLockInfo(mindmap);
isLocked = true;
lockFullName = lockInfo.getUser().getFullName();
}
return new RestMindmapMetadata(mindmap.getTitle(), mindMapBean.getProperties(), isLocked, lockFullName);
} }
@PreAuthorize("isAuthenticated() and hasRole('ROLE_USER')") @PreAuthorize("isAuthenticated() and hasRole('ROLE_USER')")
@RequestMapping(method = RequestMethod.GET, value = "/", produces = {"application/json"}) @RequestMapping(method = RequestMethod.GET, value = "/", produces = {"application/json"})
public RestMindmapList retrieveList(@RequestParam(required = false) String q) { public RestMindmapList retrieveList(@RequestParam(required = false) String q) {
final User user = Utils.getUser(); final User user = Utils.getUser(true);
final MindmapFilter filter = MindmapFilter.parse(q); final MindmapFilter filter = MindmapFilter.parse(q);
List<Mindmap> mindmaps = mindmapService.findMindmapsByUser(user); List<Mindmap> mindmaps = mindmapService.findMindmapsByUser(user);
@ -119,7 +132,7 @@ public class MindmapController extends BaseController {
public void updateDocument(@RequestBody RestMindmap restMindmap, @PathVariable int id, @RequestParam(required = false) boolean minor) throws WiseMappingException, IOException { public void updateDocument(@RequestBody RestMindmap restMindmap, @PathVariable int id, @RequestParam(required = false) boolean minor) throws WiseMappingException, IOException {
final Mindmap mindmap = findMindmapById(id); final Mindmap mindmap = findMindmapById(id);
final User user = Utils.getUser(); final User user = Utils.getUser(true);
// Validate arguments ... // Validate arguments ...
final String properties = restMindmap.getProperties(); final String properties = restMindmap.getProperties();
@ -148,7 +161,7 @@ public class MindmapController extends BaseController {
@ResponseStatus(value = HttpStatus.NO_CONTENT) @ResponseStatus(value = HttpStatus.NO_CONTENT)
public void updateRevertMindmap(@PathVariable int id, @PathVariable String hid) throws WiseMappingException, IOException { public void updateRevertMindmap(@PathVariable int id, @PathVariable String hid) throws WiseMappingException, IOException {
final Mindmap mindmap = findMindmapById(id); final Mindmap mindmap = findMindmapById(id);
final User user = Utils.getUser(); final User user = Utils.getUser(true);
if (LATEST_HISTORY_REVISION.equals(hid)) { if (LATEST_HISTORY_REVISION.equals(hid)) {
// Revert to the latest stored version ... // Revert to the latest stored version ...
@ -178,7 +191,7 @@ public class MindmapController extends BaseController {
@ResponseBody @ResponseBody
public void updateDocument(@PathVariable int id, @RequestBody String xmlDoc) throws WiseMappingException { public void updateDocument(@PathVariable int id, @RequestBody String xmlDoc) throws WiseMappingException {
final Mindmap mindmap = findMindmapById(id); final Mindmap mindmap = findMindmapById(id);
final User user = Utils.getUser(); final User user = Utils.getUser(true);
mindmap.setXmlStr(xmlDoc); mindmap.setXmlStr(xmlDoc);
saveMindmapDocument(false, mindmap, user); saveMindmapDocument(false, mindmap, user);
@ -203,7 +216,7 @@ public class MindmapController extends BaseController {
public void updateProperties(@RequestBody RestMindmap restMindmap, @PathVariable int id, @RequestParam(required = false) boolean minor) throws IOException, WiseMappingException { public void updateProperties(@RequestBody RestMindmap restMindmap, @PathVariable int id, @RequestParam(required = false) boolean minor) throws IOException, WiseMappingException {
final Mindmap mindmap = findMindmapById(id); final Mindmap mindmap = findMindmapById(id);
final User user = Utils.getUser(); final User user = Utils.getUser(true);
final String xml = restMindmap.getXml(); final String xml = restMindmap.getXml();
if (xml != null && !xml.isEmpty()) { if (xml != null && !xml.isEmpty()) {
@ -239,7 +252,7 @@ public class MindmapController extends BaseController {
@NotNull @NotNull
private Mindmap findMindmapById(int id) throws MapCouldNotFoundException, AccessDeniedSecurityException { private Mindmap findMindmapById(int id) throws MapCouldNotFoundException, AccessDeniedSecurityException {
// Has enough permissions ? // Has enough permissions ?
final User user = Utils.getUser(); final User user = Utils.getUser(true);
if (!mindmapService.hasPermissions(user, id, CollaborationRole.VIEWER)) { if (!mindmapService.hasPermissions(user, id, CollaborationRole.VIEWER)) {
throw new AccessDeniedSecurityException(id, user); throw new AccessDeniedSecurityException(id, user);
} }
@ -258,7 +271,7 @@ public class MindmapController extends BaseController {
public void updateTitle(@RequestBody String title, @PathVariable int id) throws WiseMappingException { public void updateTitle(@RequestBody String title, @PathVariable int id) throws WiseMappingException {
final Mindmap mindMap = findMindmapById(id); final Mindmap mindMap = findMindmapById(id);
final User user = Utils.getUser(); final User user = Utils.getUser(true);
// Is there a map with the same name ? // Is there a map with the same name ?
if (mindmapService.getMindmapByTitle(title, user) != null) { if (mindmapService.getMindmapByTitle(title, user) != null) {

View File

@ -20,18 +20,10 @@ package com.wisemapping.rest.model;
import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.wisemapping.exceptions.InvalidMindmapException;
import com.wisemapping.exceptions.WiseMappingException;
import com.wisemapping.model.*;
import com.wisemapping.util.TimeUtils;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.io.IOException;
import java.util.Calendar;
@JsonAutoDetect( @JsonAutoDetect(
fieldVisibility = JsonAutoDetect.Visibility.NONE, fieldVisibility = JsonAutoDetect.Visibility.NONE,
setterVisibility = JsonAutoDetect.Visibility.PUBLIC_ONLY, setterVisibility = JsonAutoDetect.Visibility.PUBLIC_ONLY,
@ -40,8 +32,49 @@ import java.util.Calendar;
) )
@JsonIgnoreProperties(ignoreUnknown = true) @JsonIgnoreProperties(ignoreUnknown = true)
public class RestMindmapMetadata { public class RestMindmapMetadata {
private String jsonProps;
private boolean locked;
private String title;
public RestMindmapMetadata() throws WiseMappingException { public String getJsonProps() {
return jsonProps;
}
public void setJsonProps(String jsonProps) {
this.jsonProps = jsonProps;
}
public boolean isLocked() {
return locked;
}
public void setLocked(boolean locked) {
this.locked = locked;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getLockFullName() {
return lockFullName;
}
public void setLockFullName(String lockFullName) {
this.lockFullName = lockFullName;
}
private String lockFullName;
public RestMindmapMetadata(@NotNull String title, @NotNull String jsonProps, boolean locked, @Nullable String lockFullName) {
this.jsonProps = jsonProps;
this.title = title;
this.locked = locked;
this.lockFullName = lockFullName;
} }
} }

View File

@ -127,10 +127,6 @@ public class MindMapBean {
mindmap.setDescription(d); mindmap.setDescription(d);
} }
public String getXmlAsJsLiteral() throws IOException {
return this.mindmap.getXmlAsJsLiteral();
}
public String getProperties() throws WiseMappingException { public String getProperties() throws WiseMappingException {
String result = null; String result = null;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

View File

@ -1,6 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta HTTP-EQUIV="REFRESH" content="0; url=c/maps/">
</head>
</html>

View File

@ -22,6 +22,7 @@ import org.springframework.web.util.DefaultUriBuilderFactory;
import java.io.IOException; import java.io.IOException;
import java.net.URI; import java.net.URI;
import java.net.URISyntaxException;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
@ -35,7 +36,7 @@ public class RestMindmapControllerTest {
private RestUser user; private RestUser user;
@Autowired @Autowired
private TestRestTemplate restTemplate; private TestRestTemplate restTemplate;
@BeforeEach @BeforeEach
@ -52,7 +53,7 @@ public class RestMindmapControllerTest {
} }
@Test @Test
public void listMaps() { public void listMaps() throws URISyntaxException {
final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON); final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON);
final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword()); final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword());
@ -81,7 +82,7 @@ public class RestMindmapControllerTest {
} }
@Test @Test
public void deleteMap() { public void deleteMap() throws URISyntaxException {
final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON); final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON);
final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword()); final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword());
@ -103,7 +104,7 @@ public class RestMindmapControllerTest {
} }
@Test @Test
public void changeMapTitle() { public void changeMapTitle() throws URISyntaxException {
final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON); final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON);
final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword()); final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword());
@ -117,7 +118,7 @@ public class RestMindmapControllerTest {
} }
@Test @Test
public void validateMapsCreation() { // Configure media types ... public void validateMapsCreation() throws URISyntaxException { // Configure media types ...
final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON); final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON);
requestHeaders.set(HttpHeaders.ACCEPT_LANGUAGE, "en"); requestHeaders.set(HttpHeaders.ACCEPT_LANGUAGE, "en");
final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword()); final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword());
@ -135,7 +136,7 @@ public class RestMindmapControllerTest {
@Test @Test
public void changeMapDescription() { public void changeMapDescription() throws URISyntaxException {
final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON); final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON);
final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword()); final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword());
@ -155,7 +156,7 @@ public class RestMindmapControllerTest {
@Test @Test
public void updateMapXml() throws IOException { // Configure media types ... public void updateMapXml() throws IOException, URISyntaxException { // Configure media types ...
final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON); final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON);
final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword()); final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword());
@ -183,7 +184,7 @@ public class RestMindmapControllerTest {
@Test @Test
public void cloneMap() throws IOException { public void cloneMap() throws IOException, URISyntaxException {
final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON); final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON);
final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword()); final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword());
@ -211,7 +212,7 @@ public class RestMindmapControllerTest {
@Test @Test
public void updateStarred() { // Configure media types ... public void updateStarred() throws URISyntaxException { // Configure media types ...
final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON); final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON);
final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword()); final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword());
@ -238,7 +239,7 @@ public class RestMindmapControllerTest {
@Test @Test
public void verifyMapOwnership() { public void verifyMapOwnership() throws URISyntaxException {
final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON); final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON);
final TestRestTemplate firstUser = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword()); final TestRestTemplate firstUser = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword());
@ -266,7 +267,7 @@ public class RestMindmapControllerTest {
} }
@Test @Test
public void updateMap() throws IOException, WiseMappingException { public void updateMap() throws IOException, WiseMappingException, URISyntaxException {
final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON); final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON);
final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword()); final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword());
@ -303,7 +304,7 @@ public class RestMindmapControllerTest {
@Test @Test
public void addCollabs() { public void addCollabs() throws URISyntaxException {
final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON); final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON);
final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword()); final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword());
@ -324,7 +325,7 @@ public class RestMindmapControllerTest {
} }
@Test @Test
public void updateCollabType() { public void updateCollabType() throws URISyntaxException {
final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON); final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON);
final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword()); final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword());
@ -361,7 +362,7 @@ public class RestMindmapControllerTest {
@Test @Test
public void deleteCollabs() { public void deleteCollabs() throws URISyntaxException {
final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON); final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON);
final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword()); final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword());
@ -400,7 +401,7 @@ public class RestMindmapControllerTest {
@Test @Test
public void deleteCollabsWithInvalidEmail() { public void deleteCollabsWithInvalidEmail() throws URISyntaxException {
final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON); final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON);
final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword()); final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword());
@ -418,7 +419,7 @@ public class RestMindmapControllerTest {
} }
@Test @Test
public void deleteCollabsWithoutOwnerPermission() { public void deleteCollabsWithoutOwnerPermission() throws URISyntaxException {
final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword()); final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword());
final URI resourceUri = addNewMap(restTemplate, "deleteWithoutOwnerPermission"); final URI resourceUri = addNewMap(restTemplate, "deleteWithoutOwnerPermission");
@ -439,7 +440,7 @@ public class RestMindmapControllerTest {
} }
@Test @Test
public void deleteOwnerCollab() { public void deleteOwnerCollab() throws URISyntaxException {
final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword()); final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword());
// Create a sample map ... // Create a sample map ...
@ -458,7 +459,7 @@ public class RestMindmapControllerTest {
} }
@Test @Test
public void addCollabsInvalidOwner() { public void addCollabsInvalidOwner() throws URISyntaxException {
final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON); final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON);
final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword()); final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword());
@ -479,7 +480,7 @@ public class RestMindmapControllerTest {
} }
@Test @Test
public void removeLabelFromMindmap() { // Configure media types ... public void removeLabelFromMindmap() throws URISyntaxException { // Configure media types ...
final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON); final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON);
final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword()); final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword());
@ -524,7 +525,7 @@ public class RestMindmapControllerTest {
} }
@Test @Test
public void addLabelToMindmap() { // Configure media types ... public void addLabelToMindmap() throws URISyntaxException { // Configure media types ...
final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON); final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON);
final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword()); final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword());
@ -548,7 +549,23 @@ public class RestMindmapControllerTest {
} }
@Test @Test
public void updateCollabs() { public void fetchMapMetadata() throws URISyntaxException {
final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON);
final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword());
// Create a sample map ...
final String mapTitle = "Maps 1 !";
final URI mindmapUri = addNewMap(restTemplate, mapTitle);
final String mapId = mindmapUri.getPath().replace("/api/restful/maps/", "");
final ResponseEntity<RestMindmapMetadata> exchange = restTemplate.exchange(mindmapUri + "/metadata", HttpMethod.GET, null, RestMindmapMetadata.class);
assertTrue(exchange.getStatusCode().is2xxSuccessful());
assertEquals(mapTitle, exchange.getBody().getTitle());
}
@Test
public void updateCollabs() throws URISyntaxException {
// Create a sample map ... // Create a sample map ...
final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON); final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON);
@ -592,7 +609,7 @@ public class RestMindmapControllerTest {
@Test @Test
public void updateProperties() throws IOException, WiseMappingException { public void updateProperties() throws IOException, WiseMappingException, URISyntaxException {
final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON); final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON);
final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword()); final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword());
@ -623,7 +640,7 @@ public class RestMindmapControllerTest {
@Test @Test
public void batchDelete() { public void batchDelete() throws URISyntaxException {
final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON); final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON);
final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword()); final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword());
@ -646,7 +663,7 @@ public class RestMindmapControllerTest {
@Test @Test
public void updatePublishState() { public void updatePublishState() throws URISyntaxException {
final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON); final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON);
final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword()); final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword());
@ -663,7 +680,7 @@ public class RestMindmapControllerTest {
} }
@Test @Test
public void fetchMapHistory() { public void fetchMapHistory() throws URISyntaxException {
final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON); final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON);
final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword()); final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword());
@ -681,7 +698,7 @@ public class RestMindmapControllerTest {
@Test @Test
public void updateRevertMindmap() throws IOException { public void updateRevertMindmap() throws IOException, URISyntaxException {
final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON); final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON);
final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword()); final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword());
@ -709,7 +726,7 @@ public class RestMindmapControllerTest {
@Test @Test
public void addCollabWhitoutOwnerPermission() { public void addCollabWhitoutOwnerPermission() throws URISyntaxException {
final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON); final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON);
final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword()); final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword());
@ -736,7 +753,7 @@ public class RestMindmapControllerTest {
} }
@Test @Test
public void addCollabWhitOwnerRole() { public void addCollabWhitOwnerRole() throws URISyntaxException {
final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON); final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_JSON);
final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword()); final TestRestTemplate restTemplate = this.restTemplate.withBasicAuth(user.getEmail(), user.getPassword());
@ -800,14 +817,19 @@ public class RestMindmapControllerTest {
} }
// //
private URI addNewMap(@NotNull TestRestTemplate template, @NotNull String title, @Nullable String xml) { private URI addNewMap(@NotNull TestRestTemplate template, @NotNull String title, @Nullable String xml) throws URISyntaxException {
// Create a new map ... // Create a new map ...
final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_XML); final HttpHeaders requestHeaders = createHeaders(MediaType.APPLICATION_XML);
HttpEntity<String> createUserEntity = new HttpEntity<>(xml, requestHeaders); final HttpEntity<String> createUserEntity = new HttpEntity<>(xml, requestHeaders);
return template.postForLocation("/api/restful/maps?title=" + title, createUserEntity);
final ResponseEntity<String> exchange = template.exchange("/api/restful/maps?title=" + title, HttpMethod.POST, createUserEntity, String.class);
assertTrue(exchange.getStatusCode().is2xxSuccessful());
final List<String> locations = exchange.getHeaders().get(HttpHeaders.LOCATION);
return new URI(locations.stream().findFirst().get());
} }
private URI addNewMap(@NotNull TestRestTemplate template, @NotNull String title) { private URI addNewMap(@NotNull TestRestTemplate template, @NotNull String title) throws URISyntaxException {
return addNewMap(template, title, null); return addNewMap(template, title, null);
} }