/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 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 org.apache.myfaces.extensions.cdi.message.impl;
import org.apache.myfaces.extensions.cdi.message.api.MessageContext;
import org.apache.myfaces.extensions.cdi.message.api.MessageContextConfig;
import org.apache.myfaces.extensions.cdi.message.api.LocaleResolver;
import org.apache.myfaces.extensions.cdi.message.api.MessageResolver;
import org.apache.myfaces.extensions.cdi.message.api.MessageInterpolator;
import org.apache.myfaces.extensions.cdi.message.api.MessageHandler;
import org.apache.myfaces.extensions.cdi.message.api.CompositeMessageHandler;
import org.apache.myfaces.extensions.cdi.message.api.FormatterFactory;
import org.apache.myfaces.extensions.cdi.message.api.Formatter;
import org.apache.myfaces.extensions.cdi.message.api.GenericConfig;
import java.util.Locale;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
/**
* @author Gerhard Petracek
*/
class DefaultMessageContextConfig implements MessageContextConfig
{
private static final long serialVersionUID = 2919944628020782545L;
private MessageInterpolator messageInterpolator;
private MessageResolver messageResolver;
private Set<MessageHandler> messageHandlers;
private LocaleResolver localeResolver;
private FormatterFactory formatterFactory;
DefaultMessageContextConfig()
{
resetMessageContextConfig();
}
private DefaultMessageContextConfig(MessageContextConfig messageContextConfigTemplate)
{
this();
this.messageInterpolator = messageContextConfigTemplate.getMessageInterpolator();
this.messageResolver = messageContextConfigTemplate.getMessageResolver();
MessageHandler newMessageHandler = messageContextConfigTemplate.getMessageHandler();
if (newMessageHandler instanceof CompositeMessageHandler)
{
this.messageHandlers.addAll(((CompositeMessageHandler) newMessageHandler).getMessageHandlers());
}
else
{
this.messageHandlers.add(newMessageHandler);
}
this.localeResolver = messageContextConfigTemplate.getLocaleResolver();
this.formatterFactory = messageContextConfigTemplate.getFormatterFactory();
}
public MessageContextBuilder use()
{
return new MessageContextBuilder()
{
private DefaultMessageContextConfig newMessageContextConfig =
new DefaultMessageContextConfig(DefaultMessageContextConfig.this);
public MessageContextBuilder messageInterpolator(MessageInterpolator messageInterpolator)
{
newMessageContextConfig.setMessageInterpolator(messageInterpolator);
return this;
}
public MessageContextBuilder messageResolver(MessageResolver messageResolver)
{
newMessageContextConfig.setMessageResolver(messageResolver);
return this;
}
public MessageContextBuilder addFormatter(Formatter formatter)
{
newMessageContextConfig.addNewFormatter(formatter);
return this;
}
public MessageContextBuilder addFormatterConfig(Class<?> type, GenericConfig config)
{
newMessageContextConfig.addNewFormatterConfig(type, config);
return this;
}
public MessageContextBuilder addFormatterConfig(Class<?> type, GenericConfig config, Locale locale)
{
addNewFormatterConfig(type, config.addProperty(Locale.class.toString(), locale));
return this;
}
public MessageContextBuilder formatterFactory(FormatterFactory formatterFactory)
{
newMessageContextConfig.setFormatterFactory(formatterFactory);
return this;
}
public MessageContextBuilder addMessageHandler(MessageHandler messageHandler)
{
newMessageContextConfig.addNewMessageHandler(messageHandler);
return this;
}
public MessageContextBuilder localeResolver(LocaleResolver localeResolver)
{
newMessageContextConfig.setLocaleResolver(localeResolver);
return this;
}
public MessageContextBuilder reset()
{
newMessageContextConfig.resetMessageContextConfig();
return this;
}
public MessageContextBuilder clear()
{
newMessageContextConfig.clearMessageContextConfig();
return this;
}
public MessageContext create()
{
return new DefaultMessageContext(this.newMessageContextConfig);
}
};
}
public MessageContextBuilder change()
{
return new MessageContextBuilder()
{
public MessageContextBuilder messageInterpolator(MessageInterpolator messageInterpolator)
{
setMessageInterpolator(messageInterpolator);
return this;
}
public MessageContextBuilder messageResolver(MessageResolver messageResolver)
{
setMessageResolver(messageResolver);
return this;
}
public MessageContextBuilder addFormatter(Formatter formatter)
{
addNewFormatter(formatter);
return this;
}
public MessageContextBuilder addFormatterConfig(Class<?> type, GenericConfig config)
{
addNewFormatterConfig(type, config);
return this;
}
public MessageContextBuilder addFormatterConfig(Class<?> type, GenericConfig config, Locale locale)
{
addNewFormatterConfig(type, config.addProperty(Locale.class.toString(), locale));
return this;
}
public MessageContextBuilder formatterFactory(FormatterFactory formatterFactory)
{
setFormatterFactory(formatterFactory);
return this;
}
public MessageContextBuilder addMessageHandler(MessageHandler messageHandler)
{
addNewMessageHandler(messageHandler);
return this;
}
public MessageContextBuilder localeResolver(LocaleResolver localeResolver)
{
setLocaleResolver(localeResolver);
return this;
}
public MessageContextBuilder reset()
{
resetMessageContextConfig();
return this;
}
public MessageContextBuilder clear()
{
clearMessageContextConfig();
return this;
}
public MessageContext create()
{
return new DefaultMessageContext(DefaultMessageContextConfig.this);
}
};
}
private void resetMessageContextConfig()
{
this.messageInterpolator = new DefaultMessageInterpolator();
this.messageResolver = null;
this.messageHandlers = new CopyOnWriteArraySet<MessageHandler>();
this.localeResolver = new DefaultLocaleResolver();
this.formatterFactory = new DefaultFormatterFactory();
}
private void clearMessageContextConfig()
{
}
public MessageInterpolator getMessageInterpolator()
{
return this.messageInterpolator;
}
public MessageResolver getMessageResolver()
{
return this.messageResolver;
}
public LocaleResolver getLocaleResolver()
{
return this.localeResolver;
}
public MessageHandler getMessageHandler()
{
return new DefaultCompositeMessageHandler(this.messageHandlers);
}
public FormatterFactory getFormatterFactory()
{
return this.formatterFactory;
}
private void setMessageInterpolator(MessageInterpolator messageInterpolator)
{
this.messageInterpolator = messageInterpolator;
}
private void setMessageResolver(MessageResolver messageResolver)
{
this.messageResolver = messageResolver;
}
private void addNewFormatter(Formatter formatter)
{
this.formatterFactory.add(formatter);
}
private void addNewFormatterConfig(Class<?> type, GenericConfig config)
{
this.formatterFactory.addFormatterConfig(type, config);
}
private void addNewMessageHandler(MessageHandler messageHandler)
{
this.messageHandlers.add(messageHandler);
}
private void setLocaleResolver(LocaleResolver localeResolver)
{
this.localeResolver = localeResolver;
}
private void setFormatterFactory(FormatterFactory formatterFactory)
{
this.formatterFactory = formatterFactory;
}
/*
* generated
*/
@Override
public boolean equals(Object o)
{
if (this == o)
{
return true;
}
if (!(o instanceof DefaultMessageContextConfig))
{
return false;
}
DefaultMessageContextConfig that = (DefaultMessageContextConfig) o;
if (!formatterFactory.equals(that.formatterFactory))
{
return false;
}
if (!localeResolver.equals(that.localeResolver))
{
return false;
}
if (!messageHandlers.equals(that.messageHandlers))
{
return false;
}
if (messageInterpolator != null
? !messageInterpolator.equals(that.messageInterpolator) : that.messageInterpolator != null)
{
return false;
}
//noinspection RedundantIfStatement
if (messageResolver != null ? !messageResolver.equals(that.messageResolver) : that.messageResolver != null)
{
return false;
}
return true;
}
@Override
public int hashCode()
{
int result = messageInterpolator != null ? messageInterpolator.hashCode() : 0;
result = 31 * result + (messageResolver != null ? messageResolver.hashCode() : 0);
result = 31 * result + messageHandlers.hashCode();
result = 31 * result + localeResolver.hashCode();
result = 31 * result + formatterFactory.hashCode();
return result;
}
}