/*
* Provided by CSTI Consulting
* Following GNU LESSER GENERAL PUBLIC LICENSE
* You may obtain more details at
*
* http://www.csticonsulting.com
* Copyright (c) 2006-2010 Consultation CS-TI inc.
*
* 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.salesmanager.central;
import java.security.Principal;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.log4j.Logger;
import org.apache.struts2.interceptor.PrincipalProxy;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ValidationAware;
import com.salesmanager.central.profile.Context;
import com.salesmanager.central.profile.ProfileConstants;
import com.salesmanager.central.web.Constants;
import com.salesmanager.core.entity.merchant.IMerchant;
import com.salesmanager.core.entity.merchant.MerchantRegistration;
import com.salesmanager.core.entity.merchant.MerchantStore;
import com.salesmanager.core.entity.reference.Language;
import com.salesmanager.core.service.ServiceFactory;
import com.salesmanager.core.service.merchant.MerchantException;
import com.salesmanager.core.service.merchant.MerchantService;
import com.salesmanager.core.util.LabelUtil;
import com.salesmanager.core.util.MessageUtil;
import com.salesmanager.core.util.www.SalesManagerPrincipalProxy;
public abstract class BaseAction extends ActionSupport implements
ServletRequestAware, ServletResponseAware, ValidationAware {
private Logger log = Logger.getLogger(BaseAction.class);
private HttpServletRequest request;
private HttpServletResponse response;
private boolean actionError = false;
protected Collection<Language> languages;// used in the page as an index
protected Map<Integer, Integer> reflanguages = new HashMap();// reference
// count -
// languageId
private String pageTitle;
/**
* Overwrites the crappy struts 2 locale management
*/
public Locale getLocale() {
Locale locale = (Locale) ActionContext.getContext().getSession().get(
"WW_TRANS_I18N_LOCALE");
if (locale != null && (locale instanceof Locale)) {
ActionContext.getContext().setLocale(locale);
return locale;
} else {
return super.getLocale();
}
}
protected void setPageTitle(String key) {
LabelUtil l = LabelUtil.getInstance();
l.setLocale(getLocale());
String t = l.getText(key);
this.pageTitle = t;
}
protected PrincipalProxy getPrincipal() {
HttpSession session = this.getServletRequest().getSession();
Principal p = (Principal) session.getAttribute("PRINCIPAL");
if (p != null) {
SalesManagerPrincipalProxy proxy = new SalesManagerPrincipalProxy(p);
return proxy;
} else {
return null;
}
}
protected void prepareLanguages() {
try {
MerchantService mservice = (MerchantService) ServiceFactory
.getService(ServiceFactory.MerchantService);
MerchantStore mstore = mservice.getMerchantStore(getContext()
.getMerchantid());
Map languagesMap = mstore.getGetSupportedLanguages();
languages = languagesMap.values();// collection reverse the map
int count = 0;
Iterator langit = languagesMap.keySet().iterator();
while (langit.hasNext()) {
Integer langid = (Integer) langit.next();
Language lang = (Language) languagesMap.get(langid);
reflanguages.put(count, langid);
count++;
}
} catch (Exception e) {
log.error(e);
}
}
protected void setLocale(Locale locale) {
ActionContext.getContext().setLocale(locale);
Map sessions = ActionContext.getContext().getSession();
sessions.put("WW_TRANS_I18N_LOCALE", locale);
this.getServletRequest().getSession().setAttribute(
"WW_TRANS_I18N_LOCALE", locale);
request.setAttribute("LOCALE", locale);
}
protected void setSuccessMessage() {
LabelUtil label = LabelUtil.getInstance();
label.setLocale(getLocale());
MessageUtil.addMessage(getServletRequest(), label
.getText("message.confirmation.success"));
}
protected void setTechnicalMessage() {
LabelUtil label = LabelUtil.getInstance();
label.setLocale(getLocale());
MessageUtil.addErrorMessage(getServletRequest(), label.getText(super.getLocale(),"errors.technical"));
}
protected void setAuthorizationMessage() {
LabelUtil label = LabelUtil.getInstance();
label.setLocale(getLocale());
MessageUtil.addErrorMessage(getServletRequest(), label.getText("messages.authorization"));
}
protected void setMessage(String text) {
LabelUtil label = LabelUtil.getInstance();
label.setLocale(getLocale());
MessageUtil.addMessage(getServletRequest(),
label.getText(text));
}
protected void setErrorMessage(String text) {
LabelUtil label = LabelUtil.getInstance();
label.setLocale(getLocale());
MessageUtil.addErrorMessage(getServletRequest(), label.getText(text));
}
protected void setErrorMessage(String text, List parameters) {
LabelUtil label = LabelUtil.getInstance();
MessageUtil.addErrorMessage(getServletRequest(), label.getText(getLocale(),text,parameters));
}
protected void addErrorMessages(List<String> messages) {
MessageUtil.addErrorMessages(getServletRequest(), messages);
}
protected void authorize(IMerchant entity) throws RuntimeException {
LabelUtil label = LabelUtil.getInstance();
label.setLocale(getLocale());
Context ctx = (Context) getServletRequest().getSession().getAttribute(
ProfileConstants.context);
if (entity == null || entity.getMerchantId() != ctx.getMerchantid()) {
MessageUtil.addErrorMessage(getServletRequest(), label.getText("messages.authorization"));
throw new AuthorizationException();
}
}
public void init() {
Context ctx = (Context) getServletRequest().getSession().getAttribute(
ProfileConstants.context);
// ctx.resetFormErrorMessages();
}
protected Context getContext() {
Context ctx = (Context) getServletRequest().getSession().getAttribute(
ProfileConstants.context);
ctx.setLang(this.getLocale().getLanguage());
return ctx;
}
protected void setAdminTokenToSession(int merchantId) {
MerchantService mservice = (MerchantService) ServiceFactory
.getService(ServiceFactory.MerchantService);
MerchantRegistration reg = null;
try {
reg = mservice.getMerchantRegistration(merchantId);
} catch (MerchantException e) {
log.error(e);
}
if (reg != null) {
if (reg.getMerchantRegistrationDefCode() == Constants.ADMIN_MERCHANT_REG_DEF_CODE) {
getServletRequest().getSession().setAttribute(
Constants.ADMIN_TOKEN_PARAM, true);
}
}
}
private boolean isInvalid(String value) {
return (value == null || value.length() == 0);
}
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
private String password;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public HttpServletRequest getServletRequest() {
return request;
}
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
public HttpServletResponse getServletResponse() {
return response;
}
public Collection<Language> getLanguages() {
return languages;
}
public void setLanguages(Collection<Language> languages) {
this.languages = languages;
}
public Map<Integer, Integer> getReflanguages() {
return reflanguages;
}
public void setReflanguages(Map<Integer, Integer> reflanguages) {
this.reflanguages = reflanguages;
}
public String getPageTitle() {
return pageTitle;
}
/**
* ValidationAware
*/
public void addFieldError(String fieldName, String errorMessage) {
actionError = true;
MessageUtil.addErrorMessage(getServletRequest(), errorMessage);
}
public void addActionMessage(String aMessage) {
actionError = true;
MessageUtil.addErrorMessage(getServletRequest(), aMessage);
}
public void addActionError(String anErrorMessage) {
actionError = true;
MessageUtil.addErrorMessage(getServletRequest(), anErrorMessage);
}
public void setFieldErrors(Map errorMap) {
actionError = true;
log.error("setFieldErrors invoked");
}
public void setActionMessages(Collection messages) {
actionError = true;
log.error("setActionMessages invoked");
}
public void setActionErrors(Collection errorMessages) {
actionError = true;
log.error("setActionErrors invoked");
}
public boolean isActionError() {
return actionError;
}
}