SpringI18nSupportProperties.java

package com.namics.oss.spring.support.i18n.autoconfigure;

import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.ArrayList;
import java.util.List;

/**
 * SpringI18nSupportProperties.
 *
 * @author rgsell, Namics AG
 * @since 13.09.17 16:25
 */
@ConfigurationProperties(prefix = SpringI18nSupportProperties.NAMICS_SPRING_I18N_PROPERTIES_PREFIX)
public class SpringI18nSupportProperties {
	public static final String NAMICS_SPRING_I18N_PROPERTIES_PREFIX = "com.namics.oss.spring.support.i18n";

	private Web web = new Web();

	private DataSource dataSource = new DataSource();

	private Fallback fallback = new Fallback();

	public Web getWeb() {
		return web;
	}

	public void setWeb(Web web) {
		this.web = web;
	}

	public SpringI18nSupportProperties web(Web web) {
		setWeb(web);
		return this;
	}

	public DataSource getDataSource() {
		return dataSource;
	}

	public void setDataSource(DataSource dataSource) {
		this.dataSource = dataSource;
	}

	public SpringI18nSupportProperties dataSource(DataSource dataSource) {
		setDataSource(dataSource);
		return this;
	}

	public Fallback getFallback() {
		return fallback;
	}

	public void setFallback(Fallback fallback) {
		this.fallback = fallback;
	}

	public SpringI18nSupportProperties fallback(Fallback fallback) {
		setFallback(fallback);
		return this;
	}


	public static class Web {
		public static final String NAMICS_SPRING_I18N_PROPERTIES_WEB = NAMICS_SPRING_I18N_PROPERTIES_PREFIX + ".web";

		/**
		 * the servlet-name
		 */
		private String servletName;

		/**
		 * the  mapping
		 */
		private String servletMapping;

		public String getServletName() {
			return servletName;
		}

		public void setServletName(String servletName) {
			this.servletName = servletName;
		}

		public String getServletMapping() {
			return servletMapping;
		}

		public void setServletMapping(String servletMapping) {
			this.servletMapping = servletMapping;
		}
	}

	public static class Fallback {
		public static final String NAMICS_SPRING_I18N_PROPERTIES_WEB = NAMICS_SPRING_I18N_PROPERTIES_PREFIX + ".fallback";

		/**
		 * use the code as message if no message found
		 */
		private boolean useCodeAsDefaultMessage = true;

		/**
		 * use configured fallback langs also for languages, which are available in db table.
		 */
		private boolean fallbackForKnownLanguages = false;
		/**
		 * use configured fallback langs for languages, which are not available in db table.
		 */
		private boolean fallbackForUnknownLanguages = false;

		/**
		 * used fallback languages.
		 */
		private List<String> fallbackLanguage = new ArrayList<>();


		public boolean isUseCodeAsDefaultMessage() {
			return useCodeAsDefaultMessage;
		}

		public void setUseCodeAsDefaultMessage(boolean useCodeAsDefaultMessage) {
			this.useCodeAsDefaultMessage = useCodeAsDefaultMessage;
		}

		public Fallback useCodeAsDefaultMessage(boolean useCodeAsDefaultMessage) {
			setUseCodeAsDefaultMessage(useCodeAsDefaultMessage);
			return this;
		}

		public boolean isFallbackForKnownLanguages() {
			return fallbackForKnownLanguages;
		}

		public void setFallbackForKnownLanguages(boolean fallbackForKnownLanguages) {
			this.fallbackForKnownLanguages = fallbackForKnownLanguages;
		}

		public Fallback fallbackForKnownLanguages(boolean fallbackForKnownLanguages) {
			setFallbackForKnownLanguages(fallbackForKnownLanguages);
			return this;
		}

		public boolean isFallbackForUnknownLanguages() {
			return fallbackForUnknownLanguages;
		}

		public void setFallbackForUnknownLanguages(boolean fallbackForUnknownLanguages) {
			this.fallbackForUnknownLanguages = fallbackForUnknownLanguages;
		}

		public Fallback fallbackForUnknownLanguages(boolean fallbackForUnknownLanguages) {
			setFallbackForUnknownLanguages(fallbackForUnknownLanguages);
			return this;
		}

		public List<String> getFallbackLanguage() {
			return fallbackLanguage;
		}

		public void setFallbackLanguage(List<String> fallbackLanguage) {
			this.fallbackLanguage = fallbackLanguage;
		}

		public Fallback fallbackLanguage(List<String> fallbackLanguage) {
			setFallbackLanguage(fallbackLanguage);
			return this;
		}
	}

	public static class DataSource {
		public static final String NAMICS_SPRING_I18N_PROPERTIES_DATA_SOURCE = NAMICS_SPRING_I18N_PROPERTIES_PREFIX + ".dataSource";

		/**
		 * the table name
		 */
		private String tableName = "MESSAGES";


		/**
		 * column name for code id.
		 */
		private String codeIdColumnName = "CODEID";

		/**
		 * column name for the language id
		 */
		private String langIdColumnName = "LANGID";

		/**
		 * column name for the message
		 */
		private String messageColumnName = "MESSAGE";

		/**
		 * column name for message type.
		 */
		private String typeColumnName = "TYPE";

		/**
		 * classpath for sql script export template.
		 */
		private String sqlExportScriptTemplatePath = "classpath:/templates/template.sql";

		/**
		 * sql export INSERT statement template.
		 */
		private String sqlExportInsertStatementTemplate = "INSERT INTO ##TABLE## (##CODEID##, ##LANGID##, ##MESSAGE##, ##TYPE##) VALUES (:codeid, :langid, :message, :type);";

		/**
		 * sql export body placeholder (replaced by INSERT statements).
		 */
		private String sqlExportBodyPlaceholder = "##BODY##";

		/**
		 * sql export character to use for line breaks.
		 */
		private String sqlExportLineBreak = System.getProperty("line.separator", "\n");

		public String getTableName() {
			return tableName;
		}

		public void setTableName(String tableName) {
			this.tableName = tableName;
		}

		public String getCodeIdColumnName() {
			return codeIdColumnName;
		}

		public void setCodeIdColumnName(String codeIdColumnName) {
			this.codeIdColumnName = codeIdColumnName;
		}

		public String getLangIdColumnName() {
			return langIdColumnName;
		}

		public void setLangIdColumnName(String langIdColumnName) {
			this.langIdColumnName = langIdColumnName;
		}

		public String getMessageColumnName() {
			return messageColumnName;
		}

		public void setMessageColumnName(String messageColumnName) {
			this.messageColumnName = messageColumnName;
		}

		public String getTypeColumnName() {
			return typeColumnName;
		}

		public void setTypeColumnName(String typeColumnName) {
			this.typeColumnName = typeColumnName;
		}

		public String getSqlExportScriptTemplatePath() {
			return sqlExportScriptTemplatePath;
		}

		public void setSqlExportScriptTemplatePath(String sqlExportScriptTemplatePath) {
			this.sqlExportScriptTemplatePath = sqlExportScriptTemplatePath;
		}

		public String getSqlExportInsertStatementTemplate() {
			return sqlExportInsertStatementTemplate;
		}

		public void setSqlExportInsertStatementTemplate(String sqlExportInsertStatementTemplate) {
			this.sqlExportInsertStatementTemplate = sqlExportInsertStatementTemplate;
		}

		public String getSqlExportBodyPlaceholder() {
			return sqlExportBodyPlaceholder;
		}

		public void setSqlExportBodyPlaceholder(String sqlExportBodyPlaceholder) {
			this.sqlExportBodyPlaceholder = sqlExportBodyPlaceholder;
		}

		public String getSqlExportLineBreak() {
			return sqlExportLineBreak;
		}

		public void setSqlExportLineBreak(String sqlExportLineBreak) {
			this.sqlExportLineBreak = sqlExportLineBreak;
		}
	}

}