Java tutorial
/* * Licensed to csti consulting * You may obtain a copy of the License at * * http://www.csticonsulting.com * Copyright (c) 2006-3 Sep, 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.core.service.ws.impl; import java.util.ArrayList; import java.util.List; import java.util.Locale; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.springframework.context.MessageSource; import com.salesmanager.core.entity.customer.ws.CreateCustomerWebServiceResponse; import com.salesmanager.core.entity.customer.ws.Customer; import com.salesmanager.core.entity.customer.ws.GetCustomerWebServiceResponse; import com.salesmanager.core.entity.reference.Country; import com.salesmanager.core.entity.reference.SystemUrlEntryType; import com.salesmanager.core.entity.reference.Zone; import com.salesmanager.core.service.ServiceException; import com.salesmanager.core.service.ServiceFactory; import com.salesmanager.core.service.cache.RefCache; import com.salesmanager.core.service.customer.CustomerService; import com.salesmanager.core.service.ws.SalesManagerCustomerWS; import com.salesmanager.core.service.ws.WebServiceCredentials; import com.salesmanager.core.service.ws.WebServiceResponse; import com.salesmanager.core.util.EncryptionUtil; import com.salesmanager.core.util.LanguageUtil; import com.salesmanager.core.util.LocaleUtil; import com.salesmanager.core.util.SpringUtil; @WebService public class SalesManagerCustomerWSImpl implements SalesManagerCustomerWS { private Logger log = Logger.getLogger(SalesManagerCustomerWSImpl.class); private static final String MESSAGE_SEPERATOR = ","; /** * Validates web service credentials * @param locale * @param credentials * @throws ServiceException */ private void validateCredentials(Locale locale, WebServiceCredentials credentials) throws ServiceException { MessageSource messageSource = (MessageSource) SpringUtil.getBean("messageSource"); try { int merchantId = credentials.getMerchantId(); String k = EncryptionUtil.generatekey(String.valueOf(merchantId)); String apiKeyGen = EncryptionUtil.encrypt(k, String.valueOf(merchantId)); if (StringUtils.isBlank(apiKeyGen) || apiKeyGen.length() < 16) { log.error("Problem with API KEY GENERATION " + apiKeyGen); throw new ServiceException(messageSource.getMessage("errors.technical", null, locale)); } String apiKey = credentials.getApiKey(); if (StringUtils.isBlank(apiKey)) { throw new ServiceException( messageSource.getMessage("messages.error.ws.invalidcredentials", null, locale)); } if (!apiKeyGen.equals(apiKey)) { throw new ServiceException( messageSource.getMessage("messages.error.ws.invalidcredentials", null, locale)); } } catch (Exception e) { if (e instanceof ServiceException) { throw (ServiceException) e; } log.error(e); throw new ServiceException(messageSource.getMessage("errors.technical", null, locale)); } } /** * Creates a new Customer */ @WebMethod public @WebResult CreateCustomerWebServiceResponse createCustomer( @WebParam(name = "credentials") WebServiceCredentials credentials, @WebParam(name = "customer") Customer customer) { MessageSource messageSource = (MessageSource) SpringUtil.getBean("messageSource"); Locale locale = LocaleUtil.getDefaultLocale(); if (StringUtils.isNotBlank(customer.getCustomerLang())) { locale = LocaleUtil.getLocale(customer.getCustomerLang()); } CreateCustomerWebServiceResponse response = new CreateCustomerWebServiceResponse(); try { //check credentials validateCredentials(locale, credentials); String[] validationErrorList = validate(customer, locale, messageSource); if (validationErrorList != null && validationErrorList.length > 0) { response.setMessages(validationErrorList); response.setStatus(2); return response; } CustomerService cservice = (CustomerService) ServiceFactory.getService(ServiceFactory.CustomerService); //if customer has customer id >0 check that it belongs to this merchant id com.salesmanager.core.entity.customer.Customer tmpCustomer = null; if (customer.getCustomerId() > 0) { tmpCustomer = cservice.getCustomer(customer.getCustomerId()); if (tmpCustomer != null) { if (tmpCustomer.getMerchantId() != credentials.getMerchantId()) { response.setMessages( new String[] { messageSource.getMessage("messages.authorization", null, locale) }); response.setStatus(0); } } } com.salesmanager.core.entity.customer.Customer newCustomer = new com.salesmanager.core.entity.customer.Customer(); if (tmpCustomer != null) {//modify existing customer newCustomer = tmpCustomer; } BeanUtils.copyProperties(newCustomer, customer); //copy properties to billing newCustomer.setCustomerBillingCity(customer.getCustomerCity()); newCustomer.setCustomerBillingCountryId(customer.getCustomerCountryId()); newCustomer.setCustomerBillingCountryName(newCustomer.getBillingCountry()); newCustomer.setCustomerBillingFirstName(customer.getCustomerFirstname()); newCustomer.setCustomerBillingLastName(customer.getCustomerLastname()); newCustomer.setCustomerBillingPostalCode(customer.getCustomerPostalCode()); newCustomer.setCustomerBillingState(newCustomer.getStateProvinceName()); newCustomer.setCustomerBillingStreetAddress(customer.getCustomerStreetAddress()); newCustomer.setCustomerBillingZoneId(customer.getCustomerZoneId()); newCustomer.setLocale(locale); newCustomer.setMerchantId(credentials.getMerchantId()); if (StringUtils.isBlank(customer.getZoneName()) && customer.getCustomerZoneId() > 0) { java.util.Map zones = (java.util.Map) RefCache .getAllZonesmap(LanguageUtil.getLanguageNumberCode(locale.getLanguage())); if (zones != null) { Zone z = (Zone) zones.get(customer.getCustomerZoneId()); if (z != null) { newCustomer.setCustomerState(z.getZoneName()); } } } if (StringUtils.isBlank(newCustomer.getBillingState()) && newCustomer.getCustomerZoneId() > 0) { java.util.Map zones = (java.util.Map) RefCache .getAllZonesmap(LanguageUtil.getLanguageNumberCode(locale.getLanguage())); if (zones != null) { Zone z = (Zone) zones.get(newCustomer.getCustomerZoneId()); if (z != null) { newCustomer.setCustomerBillingState(z.getZoneName()); } } } cservice.saveOrUpdateCustomer(newCustomer, SystemUrlEntryType.WEB, locale); response.setMessages(new String[] { messageSource.getMessage("messages.customer.customerregistered", null, locale) }); response.setStatus(1); response.setCustomerId(newCustomer.getCustomerId()); } catch (Exception e) { if (e instanceof ServiceException) { String msg[] = { ((ServiceException) e).getMessage() }; response.setMessages(msg); response.setStatus(0); } else { log.error("Exception occurred while creating Customer", e); response.setMessages(new String[] { messageSource.getMessage("errors.technical", null, locale) }); response.setStatus(0); } } return response; } /** * Get customer for a customerId and merchantId */ @WebMethod public @WebResult GetCustomerWebServiceResponse getCustomer( @WebParam(name = "credentials") WebServiceCredentials credentials, @WebParam(name = "customer") Customer customer) { MessageSource messageSource = (MessageSource) SpringUtil.getBean("messageSource"); Locale locale = LocaleUtil.getDefaultLocale(); if (StringUtils.isNotBlank(customer.getCustomerLang())) { locale = LocaleUtil.getLocale(customer.getCustomerLang()); } GetCustomerWebServiceResponse response = new GetCustomerWebServiceResponse(); try { if (customer.getCustomerId() == 0) { setStatusMsg(messageSource, locale, response, "messages.authorization", 0); return response; } //check credentials validateCredentials(locale, credentials); CustomerService cservice = (CustomerService) ServiceFactory.getService(ServiceFactory.CustomerService); com.salesmanager.core.entity.customer.Customer entityCustomer = cservice .getCustomer(customer.getCustomerId()); if (entityCustomer == null) { setStatusMsg(messageSource, locale, response, "messages.customer.doesnotexist", 0); return response; } if (entityCustomer.getMerchantId() != credentials.getMerchantId()) { setStatusMsg(messageSource, locale, response, "messages.authorization", 0); return response; } Customer webCustomer = new Customer(); BeanUtils.copyProperties(webCustomer, entityCustomer); response.setCustomer(webCustomer); response.setStatus(1); } catch (Exception e) { if (e instanceof ServiceException) { String[] msg = { ((ServiceException) e).getMessage() }; response.setMessages(msg); response.setStatus(0); } else { log.error("Exception occurred while creating Customer", e); response.setMessages(new String[] { messageSource.getMessage("errors.technical", null, locale) }); response.setStatus(0); } } return response; } private void setStatusMsg(MessageSource messageSource, Locale locale, WebServiceResponse response, String messageKey, int status) { response.setMessages(new String[] { messageSource.getMessage(messageKey, null, locale) }); response.setStatus(status); } private static String[] validate(Customer customer, Locale locale, MessageSource messageSource) { List<String> validationErrorList = new ArrayList<String>(); validate(customer.getCustomerFirstname(), "messages.required.firstname", validationErrorList, locale, messageSource); validate(customer.getCustomerLastname(), "messages.required.lastname", validationErrorList, locale, messageSource); validate(customer.getCustomerEmailAddress(), "messages.required.email", validationErrorList, locale, messageSource); validate(customer.getCustomerTelephone(), "messages.required.phone", validationErrorList, locale, messageSource); validate(customer.getCustomerCity(), "messages.required.city", validationErrorList, locale, messageSource); validate(customer.getCustomerPostalCode(), "messages.required.postalcode", validationErrorList, locale, messageSource); validate(customer.getCustomerStreetAddress(), "messages.required.streetaddress", validationErrorList, locale, messageSource); validate(customer.getCustomerLang(), "messages.required.language", validationErrorList, locale, messageSource); //validate country if (customer.getCustomerCountryId() == 0) { validationErrorList .add(messageSource.getMessage("messages.required.customercountrycode", null, locale)); } else { java.util.Map countries = RefCache.getAllcountriesmap(1); Country c = (Country) countries.get(customer.getCustomerCountryId()); if (c == null) { validationErrorList .add(messageSource.getMessage("messages.required.customercountrycode", null, locale)); } } //validate zone if (customer.getCustomerZoneId() == 0) { if (StringUtils.isBlank(customer.getZoneName())) { validationErrorList .add(messageSource.getMessage("messages.required.customerzonecode", null, locale)); } } else { java.util.Map zones = RefCache.getAllZonesmap(1); Zone z = (Zone) zones.get(customer.getCustomerZoneId()); if (z == null) { validationErrorList .add(messageSource.getMessage("messages.required.customerzonecode", null, locale)); } } if (validationErrorList.size() > 0) { String[] messages = (String[]) validationErrorList.toArray(); return messages; } else { return null; } } /** * Utility method to validate for not-null/empty check. * @param valueToValidate String to check for not-null/empty * @param validationErrorKey If validation fails then error message key to use. * @param validationErrorList List of error messages * @param locale Locale * @param messageSource MessageSource */ private static void validate(String valueToValidate, String validationErrorKey, List<String> validationErrorList, Locale locale, MessageSource messageSource) { if (StringUtils.isBlank(valueToValidate)) { validationErrorList.add(messageSource.getMessage(validationErrorKey, null, locale)); } } /* private static String getMessages(List<String> errorMessages,String seperator){ String message = null; for(String msg:errorMessages){ if(message != null){ message += seperator+msg; }else{ message = msg; } } return message; }*/ }