diff --git a/.gitignore b/.gitignore index d7e9d329517d61a5bc8614710b803afbcd882536..ce0aaf015693c03f1185e7896fb1c47cc235f43f 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ src/generated gradle.properties /out /build +InstanceSettings.xml \ No newline at end of file diff --git a/build.gradle b/build.gradle index 9e8ad7bf943c0a8dd0200a9ba6a7cfac13dd95a4..078a4fedc8bb9a367c851fcb33ef818b09ca6198 100644 --- a/build.gradle +++ b/build.gradle @@ -8,13 +8,13 @@ def vEhcache = '2.6.11' def vJackson = '2.6.5' def vPostgreSQL = '9.4.1207' def vServletApi = '3.1.0' -def vTomcat = '7.0.67' +def vTomcat = '7.0.68' def vCargo = '1.4.18' def vSlf4j = '1.7.15' def vLog4j = '1.2.17' def vJunit = '4.12' def vSaxon = '9.1.0.8' -def vGroovy = '2.4.5' +def vGroovy = '2.4.6' def vJython = '2.7.0' group 'org.nrg.xnat' @@ -24,11 +24,11 @@ buildscript { repositories { mavenLocal() maven { - url 'http://nrgxnat.artifactoryonline.com/nrgxnat/libs-release' + url 'https://nrgxnat.artifactoryonline.com/nrgxnat/libs-release' name 'XNAT Release Repository' } maven { - url 'http://nrgxnat.artifactoryonline.com/nrgxnat/libs-snapshot' + url 'https://nrgxnat.artifactoryonline.com/nrgxnat/libs-snapshot' name 'XNAT Snapshot Repository' } jcenter() @@ -43,15 +43,15 @@ buildscript { repositories { mavenLocal() maven { - url 'http://nrgxnat.artifactoryonline.com/nrgxnat/libs-release' + url 'https://nrgxnat.artifactoryonline.com/nrgxnat/libs-release' name 'XNAT Release Repository' } maven { - url 'http://nrgxnat.artifactoryonline.com/nrgxnat/libs-snapshot' + url 'https://nrgxnat.artifactoryonline.com/nrgxnat/libs-snapshot' name 'XNAT Snapshot Repository' } maven { - url 'http://nrgxnat.artifactoryonline.com/nrgxnat/ext-release' + url 'https://nrgxnat.artifactoryonline.com/nrgxnat/ext-release' name 'XNAT External Release Repository' } maven { @@ -347,9 +347,9 @@ publishing { password propertyWithDefault('repoPassword', 'password') } if (project.version.endsWith('-SNAPSHOT')) { - url "http://nrgxnat.artifactoryonline.com/nrgxnat/libs-snapshot-local" + url "https://nrgxnat.artifactoryonline.com/nrgxnat/libs-snapshot-local" } else { - url "http://nrgxnat.artifactoryonline.com/nrgxnat/libs-release-local" + url "https://nrgxnat.artifactoryonline.com/nrgxnat/libs-release-local" } } ivy { @@ -360,9 +360,9 @@ publishing { password propertyWithDefault('repoPassword', 'password') } if (project.version.endsWith('-SNAPSHOT')) { - url "http://nrgxnat.artifactoryonline.com/nrgxnat/libs-snapshot-local" + url "https://nrgxnat.artifactoryonline.com/nrgxnat/libs-snapshot-local" } else { - url "http://nrgxnat.artifactoryonline.com/nrgxnat/libs-release-local" + url "https://nrgxnat.artifactoryonline.com/nrgxnat/libs-release-local" } } } diff --git a/src/main/java/org/nrg/xapi/configuration/SwaggerConfig.java b/src/main/java/org/nrg/xapi/configuration/SwaggerConfig.java deleted file mode 100644 index ff7ae3b96612d6f7e3006c0cd3ad993b88aa1f72..0000000000000000000000000000000000000000 --- a/src/main/java/org/nrg/xapi/configuration/SwaggerConfig.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.nrg.xapi.configuration; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import springfox.documentation.builders.PathSelectors; -import springfox.documentation.builders.RequestHandlerSelectors; -import springfox.documentation.service.ApiInfo; -import springfox.documentation.spi.DocumentationType; -import springfox.documentation.spring.web.plugins.Docket; -import springfox.documentation.swagger2.annotations.EnableSwagger2; - -@Configuration -@EnableSwagger2 -public class SwaggerConfig { - @Bean - public Docket api() { - return new Docket(DocumentationType.SWAGGER_2) - .select() - .apis(RequestHandlerSelectors.basePackage("org.nrg.xapi.rest")) - .paths(PathSelectors.any()) - .build() - .apiInfo(apiInfo()); - } - - private ApiInfo apiInfo() { - return new ApiInfo( - "XNAT POC API", - "This is the API for doing stuff with the XNAT POC application.", - "Don't be a bad person", - "http://www.xnat.org", - "info@xnat.org", - "Simplified 2-Clause BSD", - "API license URL"); - } -} \ No newline at end of file diff --git a/src/main/java/org/nrg/xapi/configuration/WebConfig.java b/src/main/java/org/nrg/xapi/configuration/WebConfig.java index 47e3cd4b0b6ade80061e53d0dd4b9e628447effc..9090c6e5ecb3238a6d3f2f8983627eec37aba940 100644 --- a/src/main/java/org/nrg/xapi/configuration/WebConfig.java +++ b/src/main/java/org/nrg/xapi/configuration/WebConfig.java @@ -2,10 +2,6 @@ package org.nrg.xapi.configuration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; import org.springframework.context.MessageSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; @@ -17,11 +13,26 @@ import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.springframework.web.servlet.view.JstlView; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; @Configuration @EnableWebMvc +@EnableSwagger2 @ComponentScan("org.nrg.xapi.rest") -public class WebConfig extends WebMvcConfigurerAdapter implements ApplicationContextAware, InitializingBean { +public class WebConfig extends WebMvcConfigurerAdapter { + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("**/swagger-ui.html") + .addResourceLocations("classpath:/META-INF/resources/"); + registry.addResourceHandler("/webjars/**") + .addResourceLocations("classpath:/META-INF/resources/webjars/"); + } + @Bean public ViewResolver viewResolver() { return new InternalResourceViewResolver() {{ @@ -33,31 +44,32 @@ public class WebConfig extends WebMvcConfigurerAdapter implements ApplicationCon @Bean public MessageSource messageSource() { - ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); - messageSource.setBasename("messages"); - return messageSource; - } - - // Added to support Swagger requirements. - @Override - public void addResourceHandlers(ResourceHandlerRegistry registry) { - registry.addResourceHandler("swagger-ui.html") - .addResourceLocations("classpath:/META-INF/resources/"); - - registry.addResourceHandler("/webjars/**") - .addResourceLocations("classpath:/META-INF/resources/webjars/"); + return new ResourceBundleMessageSource() {{ + setBasename("messages"); + }}; } - @Override - public void setApplicationContext(final ApplicationContext context) throws BeansException { - _context = context; + @Bean + public Docket api() { + _log.debug("Initializing the Swagger Docket object"); + return new Docket(DocumentationType.SWAGGER_2) + .select() + .apis(RequestHandlerSelectors.basePackage("org.nrg.xapi.rest")) + .paths(PathSelectors.any()) + .build() + .apiInfo(apiInfo()); } - @Override - public void afterPropertiesSet() throws Exception { - _log.debug(_context.getApplicationName()); + private ApiInfo apiInfo() { + return new ApiInfo( + "XNAT REST API", + "The XNAT REST API (XAPI) functions provide remote programmatic access to XNAT internal functions.", + "1.7.0", + "http://www.xnat.org", + "info@xnat.org", + "Simplified 2-Clause BSD", + "API license URL"); } private static final Logger _log = LoggerFactory.getLogger(WebConfig.class); - private ApplicationContext _context; } \ No newline at end of file diff --git a/src/main/java/org/nrg/xapi/model/Error.java b/src/main/java/org/nrg/xapi/model/Error.java index 71213839a217931213f1474656758e9b1c287660..e00b871083d077c738aa554d7391d8e367c6eef3 100644 --- a/src/main/java/org/nrg/xapi/model/Error.java +++ b/src/main/java/org/nrg/xapi/model/Error.java @@ -3,55 +3,58 @@ package org.nrg.xapi.model; import io.swagger.annotations.*; import com.fasterxml.jackson.annotation.JsonProperty; -@ApiModel(description = "") -public class Error { - - private Integer code = null; - private String message = null; - private String fields = null; - - /** - **/ - @ApiModelProperty(value = "") - @JsonProperty("code") - public Integer getCode() { - return code; - } - public void setCode(Integer code) { - this.code = code; - } - - /** - **/ - @ApiModelProperty(value = "") - @JsonProperty("message") - public String getMessage() { - return message; - } - public void setMessage(String message) { - this.message = message; - } - - /** - **/ - @ApiModelProperty(value = "") - @JsonProperty("fields") - public String getFields() { - return fields; - } - public void setFields(String fields) { - this.fields = fields; - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class Error {\n"); - - sb.append(" code: ").append(code).append("\n"); - sb.append(" message: ").append(message).append("\n"); - sb.append(" fields: ").append(fields).append("\n"); - sb.append("}\n"); - return sb.toString(); - } +@ApiModel(value = "XAPI Error", description = "Provides the description of an error that occurred within the XAPI functions.") +public class Error { + private Integer code = null; + private String message = null; + private String fields = null; + + /** + * The code for the error. The meaning of the code is dependent on the context. + * @return The error code. + */ + @ApiModelProperty(name = "Error Code", value = "The code for the error.", dataType = "java.lang.Integer", notes = "The meaning of this error code is dependent on the function where the error occurred.") + @JsonProperty("code") + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + /** + * A message associated with the error. + */ + @ApiModelProperty(name = "Error Message", value = "A message indicating what the error was.", dataType = "java.lang.String") + @JsonProperty("message") + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + /** + * Indicates the fields of the data object that caused the error. + */ + @ApiModelProperty(name = "Error Fields", value = "Indicates the fields of the data object that caused the error.", dataType = "java.lang.String") + @JsonProperty("fields") + public String getFields() { + return fields; + } + + public void setFields(String fields) { + this.fields = fields; + } + + @Override + public String toString() { + return "class Error {\n" + + " code: " + code + "\n" + + " message: " + message + "\n" + + " fields: " + fields + "\n" + + "}\n"; + } } diff --git a/src/main/java/org/nrg/xapi/model/User.java b/src/main/java/org/nrg/xapi/model/users/User.java similarity index 73% rename from src/main/java/org/nrg/xapi/model/User.java rename to src/main/java/org/nrg/xapi/model/users/User.java index 6872c931a20ebf4e839b3532b1face3f7321c121..ae714c01c28daa5d6a1fbd542211510bcc597af5 100644 --- a/src/main/java/org/nrg/xapi/model/User.java +++ b/src/main/java/org/nrg/xapi/model/users/User.java @@ -1,4 +1,4 @@ -package org.nrg.xapi.model; +package org.nrg.xapi.model.users; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; @@ -24,10 +24,10 @@ public class User { public User(final UserI user) { _id = user.getID(); _username = user.getUsername(); - _firstname = user.getFirstname(); - _lastname = user.getLastname(); + _firstName = user.getFirstname(); + _lastName = user.getLastname(); _email = user.getEmail(); - _isAdmin = (user instanceof XDATUser ? ((XDATUser) user).isSiteAdmin() : false); + _isAdmin = (user instanceof XDATUser && ((XDATUser) user).isSiteAdmin()); _dbName = ""; _password = ""; _salt = ""; @@ -69,26 +69,28 @@ public class User { * The user's first name. **/ @ApiModelProperty(value = "The user's first name.") - @JsonProperty("firstname") - public String getFirstname() { - return _firstname; + @JsonProperty("firstName") + public String getFirstName() { + return _firstName; } - public void setFirstname(String firstname) { - _firstname = firstname; + @SuppressWarnings("unused") + public void setFirstName(String firstName) { + _firstName = firstName; } /** * The user's last name. **/ @ApiModelProperty(value = "The user's last name.") - @JsonProperty("lastname") - public String getLastname() { - return _lastname; + @JsonProperty("lastName") + public String getLastName() { + return _lastName; } - public void setLastname(String lastname) { - _lastname = lastname; + @SuppressWarnings("unused") + public void setLastName(String lastName) { + _lastName = lastName; } /** @@ -126,6 +128,7 @@ public class User { return _dbName; } + @SuppressWarnings("unused") public void setDbName(String dbName) { _dbName = dbName; } @@ -152,6 +155,7 @@ public class User { return _salt; } + @SuppressWarnings("unused") public void setSalt(String salt) { _salt = salt; } @@ -178,22 +182,23 @@ public class User { return _authorization; } + @SuppressWarnings("unused") public void setAuthorization(UserAuth authorization) { _authorization = authorization; } @JsonIgnore - public String getFullname() { - return String.format("%s %s", getFirstname(), getLastname()); + public String getFullName() { + return String.format("%s %s", getFirstName(), getLastName()); } @JsonIgnore - public XdatUser getXDATUser(final UserI requestor) { + public XdatUser getXDATUser(final UserI requester) { final XdatUser user; if (StringUtils.isNotBlank(_username)) { - user = XDATUser.getXdatUsersByLogin(_username, requestor, true); + user = XDATUser.getXdatUsersByLogin(_username, requester, true); } else if (_id != null) { - user = AutoXdatUser.getXdatUsersByXdatUserId(_id, requestor, true); + user = AutoXdatUser.getXdatUsersByXdatUserId(_id, requester, true); } else { user = null; } @@ -202,8 +207,8 @@ public class User { } final XDATUser newUser = new XDATUser(); newUser.setLogin(_username); - newUser.setFirstname(_firstname); - newUser.setLastname(_lastname); + newUser.setFirstname(_firstName); + newUser.setLastname(_lastName); newUser.setEmail(_email); newUser.setPrimaryPassword(_password); newUser.setSalt(_salt); @@ -212,28 +217,26 @@ public class User { @Override public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class User {\n"); - - sb.append(" id: ").append(_id).append("\n"); - sb.append(" username: ").append(_username).append("\n"); - sb.append(" firstname: ").append(_firstname).append("\n"); - sb.append(" lastname: ").append(_lastname).append("\n"); - sb.append(" email: ").append(_email).append("\n"); - sb.append(" dbName: ").append(_dbName).append("\n"); - sb.append(" password: ").append(_password).append("\n"); - sb.append(" salt: ").append(_salt).append("\n"); - sb.append(" lastModified: ").append(_lastModified).append("\n"); - sb.append(" authorization: ").append(_authorization).append("\n"); - sb.append("}\n"); - return sb.toString(); - } - - private Integer _id = null; - private String _username = null; - private String _firstname = null; - private String _lastname = null; - private String _email = null; + + return "class User {\n" + + " id: " + _id + "\n" + + " username: " + _username + "\n" + + " firstName: " + _firstName + "\n" + + " lastName: " + _lastName + "\n" + + " email: " + _email + "\n" + + " dbName: " + _dbName + "\n" + + " password: " + _password + "\n" + + " salt: " + _salt + "\n" + + " lastModified: " + _lastModified + "\n" + + " authorization: " + _authorization + "\n" + + "}\n"; + } + + private Integer _id = null; + private String _username = null; + private String _firstName = null; + private String _lastName = null; + private String _email = null; private boolean _isAdmin; private String _dbName = null; private String _password = null; diff --git a/src/main/java/org/nrg/xapi/model/UserAuth.java b/src/main/java/org/nrg/xapi/model/users/UserAuth.java similarity index 99% rename from src/main/java/org/nrg/xapi/model/UserAuth.java rename to src/main/java/org/nrg/xapi/model/users/UserAuth.java index f4fe810078e01b583edd3c1ead62123048942ef8..0ad739ccd49e2a30d240bc565b47b635cab85492 100644 --- a/src/main/java/org/nrg/xapi/model/UserAuth.java +++ b/src/main/java/org/nrg/xapi/model/users/UserAuth.java @@ -1,4 +1,4 @@ -package org.nrg.xapi.model; +package org.nrg.xapi.model.users; import java.util.Date; import java.util.*; diff --git a/src/main/java/org/nrg/xapi/rest/UsersApi.java b/src/main/java/org/nrg/xapi/rest/users/UsersApi.java similarity index 96% rename from src/main/java/org/nrg/xapi/rest/UsersApi.java rename to src/main/java/org/nrg/xapi/rest/users/UsersApi.java index 95c0604fddde190f147a72e002284e3b4cb333f9..feb7cd73f1751b4a6b659a92da5f7558f11f02dd 100644 --- a/src/main/java/org/nrg/xapi/rest/UsersApi.java +++ b/src/main/java/org/nrg/xapi/rest/users/UsersApi.java @@ -1,8 +1,9 @@ -package org.nrg.xapi.rest; +package org.nrg.xapi.rest.users; import io.swagger.annotations.*; import org.apache.commons.lang3.StringUtils; -import org.nrg.xapi.model.User; +import org.nrg.xapi.model.users.User; +import org.nrg.xapi.rest.NotFoundException; import org.nrg.xdat.security.XDATUser; import org.nrg.xdat.security.helpers.Users; import org.nrg.xdat.security.user.exceptions.UserInitException; @@ -22,7 +23,7 @@ import java.util.List; @Api(description = "The XNAT POC User Management API") @RestController -@RequestMapping(value = "/api/users") +@RequestMapping(value = "/users") public class UsersApi { private static final Logger _log = LoggerFactory.getLogger(UsersApi.class); @@ -74,11 +75,11 @@ public class UsersApi { if (user == null) { return new ResponseEntity<>(HttpStatus.NOT_FOUND); } - if ((StringUtils.isNotBlank(model.getFirstname())) && (StringUtils.equals(model.getFirstname(), user.getFirstname()))) { - user.setFirstname(model.getFirstname()); + if ((StringUtils.isNotBlank(model.getFirstName())) && (StringUtils.equals(model.getFirstName(), user.getFirstname()))) { + user.setFirstname(model.getFirstName()); } - if ((StringUtils.isNotBlank(model.getLastname())) && (StringUtils.equals(model.getLastname(), user.getLastname()))) { - user.setLastname(model.getLastname()); + if ((StringUtils.isNotBlank(model.getLastName())) && (StringUtils.equals(model.getLastName(), user.getLastname()))) { + user.setLastname(model.getLastName()); } if ((StringUtils.isNotBlank(model.getEmail())) && (StringUtils.equals(model.getEmail(), user.getEmail()))) { user.setEmail(model.getEmail()); diff --git a/src/main/java/org/nrg/xnat/actions/postArchive/ClearStudyRoutingAction.java b/src/main/java/org/nrg/xnat/actions/postArchive/ClearStudyRoutingAction.java index 4507b65703bff2b104c7ec4288bfc02b54f6cb5e..b48a19210c290f1a6aa9806e25f47773bafffaad 100644 --- a/src/main/java/org/nrg/xnat/actions/postArchive/ClearStudyRoutingAction.java +++ b/src/main/java/org/nrg/xnat/actions/postArchive/ClearStudyRoutingAction.java @@ -11,8 +11,6 @@ import org.nrg.xnat.archive.PrearcSessionArchiver; /** * ClearStudyRoutingAction class. - * - * @author Rick Herrick <rick.herrick@wustl.edu> on 10/28/2014. */ @SuppressWarnings("unused") public class ClearStudyRoutingAction implements PrearcSessionArchiver.PostArchiveAction { diff --git a/src/main/java/org/nrg/xnat/initialization/XnatWebAppInitializer.java b/src/main/java/org/nrg/xnat/initialization/XnatWebAppInitializer.java index b0d1ce4f4e90ec1f10063a64faac811514264365..3e65a29e7ddddf017e2f7230ded9e4b1de792a19 100644 --- a/src/main/java/org/nrg/xnat/initialization/XnatWebAppInitializer.java +++ b/src/main/java/org/nrg/xnat/initialization/XnatWebAppInitializer.java @@ -39,7 +39,7 @@ public class XnatWebAppInitializer extends AbstractAnnotationConfigDispatcherSer // Now initialize everything else. context.addFilter("springSecurityFilterChain", DelegatingFilterProxy.class).addMappingForUrlPatterns(null, false, "/*"); - context.addFilter("updateExpirationCookie", UpdateExpirationCookie.class); + context.addFilter("updateExpirationCookie", UpdateExpirationCookie.class).addMappingForUrlPatterns(null, false, "/*"); context.addListener(XnatSessionEventPublisher.class); context.addListener(AxisHTTPSessionListener.class); diff --git a/src/main/java/org/nrg/xnat/restlet/util/UpdateExpirationCookie.java b/src/main/java/org/nrg/xnat/restlet/util/UpdateExpirationCookie.java index 691e8f06d2210e3c6d072ea63ef426efb372b09e..092ad2b598fe4327cfc991212ee8ce3ab4c661a8 100644 --- a/src/main/java/org/nrg/xnat/restlet/util/UpdateExpirationCookie.java +++ b/src/main/java/org/nrg/xnat/restlet/util/UpdateExpirationCookie.java @@ -10,6 +10,10 @@ */ package org.nrg.xnat.restlet.util; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.filter.GenericFilterBean; + import javax.servlet.*; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; @@ -17,27 +21,27 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Date; -public class UpdateExpirationCookie implements Filter { - public static String name = "SESSION_EXPIRATION_TIME"; - - - @Override - public void destroy() {} - @Override - public void doFilter(ServletRequest req, - ServletResponse resp, - FilterChain chain) throws IOException, ServletException { - HttpServletRequest hq = (HttpServletRequest) req; - HttpServletResponse hr = (HttpServletResponse) resp; - int sessionIdleTime = hq.getSession().getMaxInactiveInterval(); - - Cookie c=new Cookie(name, ""+(new Date()).getTime()+","+((sessionIdleTime *1000))); - c.setPath("/"); - hr.addCookie(c); - - chain.doFilter(req,resp); - } - - @Override - public void init(FilterConfig fg) throws ServletException {} +public class UpdateExpirationCookie extends GenericFilterBean { + + public static String name = "SESSION_EXPIRATION_TIME"; + + @Override + public void doFilter(final ServletRequest req, final ServletResponse resp, final FilterChain chain) throws IOException, ServletException { + final HttpServletRequest hq = (HttpServletRequest) req; + final HttpServletResponse hr = (HttpServletResponse) resp; + final int sessionIdleTime = hq.getSession().getMaxInactiveInterval(); + + final Cookie c = new Cookie(name, "" + (new Date()).getTime() + "," + ((sessionIdleTime * 1000))); + c.setPath("/"); + hr.addCookie(c); + + chain.doFilter(req, resp); + } + + @Override + protected void initFilterBean() throws ServletException { + _log.debug("Initializing the UpdateExpirationCookie filter bean."); + } + + private static final Logger _log = LoggerFactory.getLogger(UpdateExpirationCookie.class); } diff --git a/src/main/webapp/WEB-INF/conf/InstanceSettings.xml b/src/main/webapp/WEB-INF/conf/InstanceSettings.xml.sample similarity index 100% rename from src/main/webapp/WEB-INF/conf/InstanceSettings.xml rename to src/main/webapp/WEB-INF/conf/InstanceSettings.xml.sample