Package org.hoteia.qalingo.core.web.mvc.factory

Source Code of org.hoteia.qalingo.core.web.mvc.factory.BackofficeFormFactory

/**
* Most of the code in the Qalingo project is copyrighted Hoteia and licensed
* under the Apache License Version 2.0 (release version 0.8.0)
*         http://www.apache.org/licenses/LICENSE-2.0
*
*                   Copyright (c) Hoteia, 2012-2014
* http://www.hoteia.com - http://twitter.com/hoteia - contact@hoteia.com
*
*/
package org.hoteia.qalingo.core.web.mvc.factory;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.hoteia.qalingo.core.domain.AbstractPaymentGateway;
import org.hoteia.qalingo.core.domain.AbstractRuleReferential;
import org.hoteia.qalingo.core.domain.Asset;
import org.hoteia.qalingo.core.domain.CatalogCategoryMaster;
import org.hoteia.qalingo.core.domain.CatalogCategoryVirtual;
import org.hoteia.qalingo.core.domain.Company;
import org.hoteia.qalingo.core.domain.Customer;
import org.hoteia.qalingo.core.domain.DeliveryMethod;
import org.hoteia.qalingo.core.domain.DeliveryMethodPrice;
import org.hoteia.qalingo.core.domain.EngineSetting;
import org.hoteia.qalingo.core.domain.EngineSettingValue;
import org.hoteia.qalingo.core.domain.MarketArea;
import org.hoteia.qalingo.core.domain.OrderCustomer;
import org.hoteia.qalingo.core.domain.ProductBrand;
import org.hoteia.qalingo.core.domain.ProductBrandAttribute;
import org.hoteia.qalingo.core.domain.ProductMarketing;
import org.hoteia.qalingo.core.domain.ProductMarketingAttribute;
import org.hoteia.qalingo.core.domain.ProductSku;
import org.hoteia.qalingo.core.domain.ProductSkuAttribute;
import org.hoteia.qalingo.core.domain.Retailer;
import org.hoteia.qalingo.core.domain.RetailerAddress;
import org.hoteia.qalingo.core.domain.Store;
import org.hoteia.qalingo.core.domain.Tax;
import org.hoteia.qalingo.core.domain.User;
import org.hoteia.qalingo.core.domain.Warehouse;
import org.hoteia.qalingo.core.i18n.message.CoreMessageSource;
import org.hoteia.qalingo.core.pojo.RequestData;
import org.hoteia.qalingo.core.service.BackofficeUrlService;
import org.hoteia.qalingo.core.web.mvc.form.AssetForm;
import org.hoteia.qalingo.core.web.mvc.form.CatalogCategoryForm;
import org.hoteia.qalingo.core.web.mvc.form.CompanyForm;
import org.hoteia.qalingo.core.web.mvc.form.CustomerForm;
import org.hoteia.qalingo.core.web.mvc.form.DeliveryMethodForm;
import org.hoteia.qalingo.core.web.mvc.form.EngineSettingForm;
import org.hoteia.qalingo.core.web.mvc.form.EngineSettingValueForm;
import org.hoteia.qalingo.core.web.mvc.form.OrderForm;
import org.hoteia.qalingo.core.web.mvc.form.PaymentGatewayForm;
import org.hoteia.qalingo.core.web.mvc.form.ProductBrandForm;
import org.hoteia.qalingo.core.web.mvc.form.ProductMarketingForm;
import org.hoteia.qalingo.core.web.mvc.form.ProductSkuForm;
import org.hoteia.qalingo.core.web.mvc.form.QuickSearchForm;
import org.hoteia.qalingo.core.web.mvc.form.RetailerForm;
import org.hoteia.qalingo.core.web.mvc.form.RuleForm;
import org.hoteia.qalingo.core.web.mvc.form.StoreForm;
import org.hoteia.qalingo.core.web.mvc.form.TaxForm;
import org.hoteia.qalingo.core.web.mvc.form.UserForm;
import org.hoteia.qalingo.core.web.mvc.form.WarehouseForm;
import org.hoteia.qalingo.core.web.util.RequestUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
*
*/
@Service("backofficeFormFactory")
public class BackofficeFormFactory {

    @Autowired
    protected CoreMessageSource coreMessageSource;

    @Autowired
    protected RequestUtil requestUtil;
   
    @Autowired
    protected BackofficeUrlService backofficeUrlService;
   
//    @Autowired
//    protected AttributeService attributeService;

    public EngineSettingForm buildEngineSettingForm(final RequestData requestData, final EngineSetting engineSetting) throws Exception {
        final EngineSettingForm engineSettingForm = new EngineSettingForm();
        if(engineSetting != null){
            engineSettingForm.setId(engineSetting.getId().toString());
            engineSettingForm.setCode(engineSetting.getCode());
            engineSettingForm.setVersion(engineSetting.getVersion());
            engineSettingForm.setName(engineSetting.getName());
            engineSettingForm.setDescription(engineSetting.getDescription());
            engineSettingForm.setDefaultValue(engineSetting.getDefaultValue());
        }
        return engineSettingForm;
    }
   
    public EngineSettingValueForm buildEngineSettingValueForm(final RequestData requestData, final EngineSettingValue engineSettingValue) throws Exception {
        final EngineSettingValueForm engineSettingValueForm = new EngineSettingValueForm();
        if(engineSettingValue != null){
            engineSettingValueForm.setId(engineSettingValue.getId().toString());
            engineSettingValueForm.setContext(engineSettingValue.getContext());
            engineSettingValueForm.setValue(engineSettingValue.getValue());
        }
        return engineSettingValueForm;
    }

    public PaymentGatewayForm buildPaymentGatewayForm(final MarketArea marketArea, final AbstractPaymentGateway paymentGateway) throws Exception {
        final PaymentGatewayForm paymentGatewayForm = new PaymentGatewayForm();
        if(paymentGateway != null){
            paymentGatewayForm.setId(paymentGateway.getId().toString());
            paymentGatewayForm.setVersion(paymentGateway.getVersion());
            paymentGatewayForm.setCode(paymentGateway.getCode());
            paymentGatewayForm.setName(paymentGateway.getName());
            paymentGatewayForm.setDescription(paymentGateway.getDescription());
            paymentGatewayForm.setActive(paymentGateway.getMarketAreas().contains(marketArea));
        }
        return paymentGatewayForm;
    }

    public UserForm buildUserForm(final RequestData requestData, final User user) throws Exception {
        final UserForm userForm = new UserForm();
        if(user != null){
            userForm.setId(user.getId().toString());
            userForm.setVersion(user.getVersion());
            userForm.setCode(user.getCode());
            userForm.setLogin(user.getLogin());
            userForm.setTitle(user.getTitle());
            userForm.setFirstname(user.getFirstname());
            userForm.setLastname(user.getLastname());
            userForm.setEmail(user.getEmail());
            userForm.setActive(user.isActive());
           
            userForm.setAddress1(user.getAddress1());
            userForm.setAddress2(user.getAddress2());
            userForm.setPostalCode(user.getPostalCode());
            userForm.setCity(user.getCity());
            userForm.setStateCode(user.getStateCode());
            userForm.setAreaCode(user.getAreaCode());

        }
        return userForm;
    }
   
    public CompanyForm buildCompanyForm(final RequestData requestData, final Company company) throws Exception {
        final CompanyForm companyForm = new CompanyForm();
        if(company != null){
            companyForm.setId(company.getId().toString());
            companyForm.setVersion(company.getVersion());
            companyForm.setCode(company.getCode());
            companyForm.setName(company.getName());
            companyForm.setDescription(company.getDescription());
            companyForm.setActive(company.isActive());
           
            companyForm.setAddress1(company.getAddress1());
            companyForm.setAddress2(company.getAddress2());
            companyForm.setPostalCode(company.getPostalCode());
            companyForm.setCity(company.getCity());
            companyForm.setStateCode(company.getStateCode());
            companyForm.setAreaCode(company.getAreaCode());

        }
        return companyForm;
    }

    public QuickSearchForm buildEngineSettingQuickSearchForm(final RequestData requestData) throws Exception {
        final QuickSearchForm engineSettingQuickSearchForm = new QuickSearchForm();
        return engineSettingQuickSearchForm;
    }

    public QuickSearchForm buildUserQuickSearchForm(final RequestData requestData) throws Exception {
        final QuickSearchForm userQuickSearchForm = new QuickSearchForm();
        return userQuickSearchForm;
    }

    public QuickSearchForm buildBatchQuickSearchForm(final RequestData requestData) throws Exception {
        final QuickSearchForm batchQuickSearchForm = new QuickSearchForm();
        return batchQuickSearchForm;
    }

    public CatalogCategoryForm buildCatalogCategoryForm(final RequestData requestData) throws Exception {
        final CatalogCategoryForm catalogCategoryForm = new CatalogCategoryForm();
//        List<AttributeDefinition> attributeDefinitions = attributeService.findCatalogCategoryGlobalAttributeDefinitions();
//        for (Iterator<AttributeDefinition> iterator = attributeDefinitions.iterator(); iterator.hasNext();) {
//            AttributeDefinition attributeDefinition = (AttributeDefinition) iterator.next();
//            if(attributeDefinition.isGlobal()){
//                catalogCategoryForm.getGlobalAttributes().put(attributeDefinition.getCode(), "");
//            } else {
//                catalogCategoryForm.getMarketAreaAttributes().put(attributeDefinition.getCode(), "");
//            }
//        }
        return catalogCategoryForm;
    }

    public CatalogCategoryForm buildCatalogMasterCategoryForm(final RequestData requestData, final CatalogCategoryMaster parentProductCategory, final CatalogCategoryMaster catalogCategory) throws Exception {
        final CatalogCategoryForm catalogCategoryForm = buildCatalogCategoryForm(requestData);
        if(parentProductCategory != null){
            catalogCategoryForm.setDefaultParentCategoryId("" + catalogCategory.getId());
        } else {
            if(catalogCategory != null
                    && catalogCategory.getParentCatalogCategory() != null){
                catalogCategoryForm.setDefaultParentCategoryId("" + catalogCategory.getParentCatalogCategory().getId());
            }
        }
       
        if(catalogCategory != null){
            catalogCategoryForm.setId(catalogCategory.getId().toString());
            catalogCategoryForm.setCatalogCode(catalogCategory.getName());
            catalogCategoryForm.setName(catalogCategory.getName());
            catalogCategoryForm.setCode(catalogCategory.getCode());
            catalogCategoryForm.setDescription(catalogCategory.getDescription());
            if(catalogCategory.getRanking() != null){
                catalogCategoryForm.setRanking("" + catalogCategory.getRanking());
            }
        }
        return catalogCategoryForm;
    }
   
    public CatalogCategoryForm buildCatalogVirtualCategoryForm(final RequestData requestData, final CatalogCategoryVirtual parentProductCategory, final CatalogCategoryVirtual catalogCategory) throws Exception {
        final CatalogCategoryForm catalogCategoryForm = buildCatalogCategoryForm(requestData);
        if(parentProductCategory != null){
            catalogCategoryForm.setDefaultParentCategoryId("" + parentProductCategory.getId());
        } else {
            if(catalogCategory != null
                    && catalogCategory.getParentCatalogCategory() != null){
                catalogCategoryForm.setDefaultParentCategoryId("" + catalogCategory.getParentCatalogCategory().getId());
            }
        }
       
        if(catalogCategory != null){
            catalogCategoryForm.setId(catalogCategory.getId().toString());
            catalogCategoryForm.setCode(catalogCategory.getCode());
            catalogCategoryForm.setName(catalogCategory.getName());
            catalogCategoryForm.setDescription(catalogCategory.getDescription());
            if(catalogCategory.getRanking() != null){
                catalogCategoryForm.setRanking("" + catalogCategory.getRanking());
            }
            catalogCategoryForm.setCatalogCode(catalogCategory.getName());
            CatalogCategoryMaster catalogCategoryMaster = catalogCategory.getCategoryMaster();
            catalogCategoryForm.setMasterCategoryId("" + catalogCategoryMaster.getId());
        }
        return catalogCategoryForm;
    }
   
    public ProductBrandForm buildProductBrandForm(final RequestData requestData, final ProductBrand productBrand) throws Exception {
        final MarketArea currentMarketArea = requestData.getMarketArea();
       
        final ProductBrandForm productBrandForm = new ProductBrandForm();
        if(productBrand != null){
            productBrandForm.setId(productBrand.getId().toString());
            productBrandForm.setName(productBrand.getName());
            productBrandForm.setCode(productBrand.getCode());
            productBrandForm.setDescription(productBrand.getDescription());
           
            List<ProductBrandAttribute> globalAttributes = productBrand.getGlobalAttributes();
            for (Iterator<ProductBrandAttribute> iterator = globalAttributes.iterator(); iterator.hasNext();) {
                ProductBrandAttribute productBrandAttribute = (ProductBrandAttribute) iterator.next();
                productBrandForm.getGlobalAttributes().put(productBrandAttribute.getAttributeDefinition().getCode(), productBrandAttribute.getValueAsString());
            }
           
            List<ProductBrandAttribute> marketAreaAttributes = productBrand.getMarketAreaAttributes(currentMarketArea.getId());
            for (Iterator<ProductBrandAttribute> iterator = marketAreaAttributes.iterator(); iterator.hasNext();) {
                ProductBrandAttribute productBrandAttribute = (ProductBrandAttribute) iterator.next();
                productBrandForm.getMarketAreaAttributes().put(productBrandAttribute.getAttributeDefinition().getCode(), productBrandAttribute.getValueAsString());
            }
        }
        return productBrandForm;
    }
   
    public ProductMarketingForm buildProductMarketingForm(final RequestData requestData, final ProductMarketing productMarketing) throws Exception {
        final MarketArea currentMarketArea = requestData.getMarketArea();
       
        final ProductMarketingForm productMarketingForm = new ProductMarketingForm();
        if(productMarketing != null){
            productMarketingForm.setId(productMarketing.getId().toString());
            productMarketingForm.setName(productMarketing.getName());
            productMarketingForm.setCode(productMarketing.getCode());
            productMarketingForm.setDescription(productMarketing.getDescription());
           
            List<ProductMarketingAttribute> globalAttributes = productMarketing.getGlobalAttributes();
            for (Iterator<ProductMarketingAttribute> iterator = globalAttributes.iterator(); iterator.hasNext();) {
                ProductMarketingAttribute productMarketingAttribute = (ProductMarketingAttribute) iterator.next();
                productMarketingForm.getGlobalAttributes().put(productMarketingAttribute.getAttributeDefinition().getCode(), productMarketingAttribute.getValueAsString());
            }
           
            List<ProductMarketingAttribute> marketAreaAttributes = productMarketing.getMarketAreaAttributes(currentMarketArea.getId());
            for (Iterator<ProductMarketingAttribute> iterator = marketAreaAttributes.iterator(); iterator.hasNext();) {
                ProductMarketingAttribute productMarketingAttribute = (ProductMarketingAttribute) iterator.next();
                productMarketingForm.getMarketAreaAttributes().put(productMarketingAttribute.getAttributeDefinition().getCode(), productMarketingAttribute.getValueAsString());
            }
        }
        return productMarketingForm;
    }
   
    public AssetForm buildProductMarketingAssetForm(final RequestData requestData, final Asset asset) throws Exception {
        final AssetForm assetForm = new AssetForm();
        if(asset != null){
            assetForm.setId(asset.getId().toString());
            assetForm.setName(asset.getName());
            assetForm.setDescription(asset.getDescription());
            assetForm.setDefault(asset.isDefault());
            assetForm.setPath(asset.getPath());
            assetForm.setType(asset.getType());
            assetForm.setSize(asset.getSize());
        }
        return assetForm;
    }
   
    public ProductSkuForm buildProductSkuForm(final RequestData requestData, final ProductMarketing productMarketing, final ProductSku productSku) throws Exception {
        final MarketArea currentMarketArea = requestData.getMarketArea();
       
        final ProductSkuForm productSkuForm = new ProductSkuForm();
        if(productSku != null){
           
            productSkuForm.setId(productSku.getId().toString());
            productSkuForm.setName(productSku.getName());
            productSkuForm.setCode(productSku.getCode());
            productSkuForm.setDescription(productSku.getDescription());

            List<ProductSkuAttribute> globalAttributes = productSku.getGlobalAttributes();
            for (Iterator<ProductSkuAttribute> iterator = globalAttributes.iterator(); iterator.hasNext();) {
                ProductSkuAttribute productSkuAttribute = (ProductSkuAttribute) iterator.next();
                productSkuForm.getGlobalAttributes().put(productSkuAttribute.getAttributeDefinition().getCode(), productSkuAttribute.getValueAsString());
            }
           
            List<ProductSkuAttribute> marketAreaAttributes = productSku.getMarketAreaAttributes(currentMarketArea.getId());
            for (Iterator<ProductSkuAttribute> iterator = marketAreaAttributes.iterator(); iterator.hasNext();) {
                ProductSkuAttribute productSkuAttribute = (ProductSkuAttribute) iterator.next();
                productSkuForm.getMarketAreaAttributes().put(productSkuAttribute.getAttributeDefinition().getCode(), productSkuAttribute.getValueAsString());
            }
        }
        if(productMarketing != null){
            productSkuForm.setProductMarketingId("" + productMarketing.getId());
        }
        return productSkuForm;
    }
   
    public CustomerForm buildCustomerForm(final RequestData requestData, final Customer customer) throws Exception {
        final CustomerForm customerForm = new CustomerForm();
        if(customer != null){
            customerForm.setId(customer.getId().toString());
            customerForm.setVersion(customer.getVersion());
            customerForm.setCode(customer.getCode());
            customerForm.setLogin(customer.getLogin());
            customerForm.setTitle(customer.getTitle());
            customerForm.setFirstname(customer.getFirstname());
            customerForm.setLastname(customer.getLastname());
            customerForm.setEmail(customer.getEmail());
            customerForm.setPassword(customer.getPassword());
            customerForm.setDefaultLocale(customer.getDefaultLocale());
            customerForm.setActive(customer.isActive());
        }
        return customerForm;
    }
   
    public OrderForm buildOrderForm(final RequestData requestData, final OrderCustomer order) throws Exception {
        final OrderForm orderForm = new OrderForm();
        if(order != null){
            orderForm.setId(order.getId().toString());
            orderForm.setVersion(order.getVersion());
            orderForm.setStatus(order.getStatus());
            orderForm.setOrderNum(order.getOrderNum());
            orderForm.setCustomerId(order.getCustomerId());
            orderForm.setBillingAddressId(order.getBillingAddress().getId());
            orderForm.setShippingAddressId(order.getShippingAddress().getId());
        }
        return orderForm;
    }
   
    public RuleForm buildRuleForm(final RequestData requestData, final AbstractRuleReferential rule) throws Exception {
        final RuleForm ruleForm = new RuleForm();
        if(rule != null){
            ruleForm.setId(rule.getId());
            ruleForm.setVersion(rule.getVersion());
            ruleForm.setCode(rule.getCode());
            ruleForm.setName(rule.getName());
            ruleForm.setDescription(rule.getDescription());
            ruleForm.setSalience(rule.getSalience());
        }
        return ruleForm;
    }
   
    public WarehouseForm buildWarehouseForm(final RequestData requestData, final Warehouse warehouse) throws Exception {
        final WarehouseForm warehouseForm = new WarehouseForm();
        if(warehouse != null){
            warehouseForm.setId(warehouse.getId().toString());
            warehouseForm.setVersion(warehouse.getVersion());
            warehouseForm.setCode(warehouse.getCode());
            warehouseForm.setName(warehouse.getName());
            warehouseForm.setDescription(warehouse.getDescription());
        }
        return warehouseForm;
    }
   
    public DeliveryMethodForm buildDeliveryMethodForm(final RequestData requestData, final DeliveryMethod deliveryMethod) throws Exception {
        final DeliveryMethodForm deliveryMethodForm = new DeliveryMethodForm();
        if(deliveryMethod != null){
            deliveryMethodForm.setId(deliveryMethod.getId().toString());
            deliveryMethodForm.setVersion(deliveryMethod.getVersion());
            deliveryMethodForm.setCode(deliveryMethod.getCode());
            deliveryMethodForm.setName(deliveryMethod.getName());
            deliveryMethodForm.setDescription(deliveryMethod.getDescription());
           
            Map<String, String> prices = new HashMap<String, String>();
            for (Iterator<DeliveryMethodPrice> iterator = deliveryMethod.getPrices().iterator(); iterator.hasNext();) {
                DeliveryMethodPrice deliveryMethodPrice = (DeliveryMethodPrice) iterator.next();
                deliveryMethodForm.getPrices().put(deliveryMethodPrice.getCurrency().getCode(), deliveryMethodPrice.getPrice().toString());
            }
        }
        return deliveryMethodForm;
    }
   
    public TaxForm buildTaxForm(final RequestData requestData, final Tax tax) throws Exception {
        final TaxForm taxForm = new TaxForm();
        if(tax != null){
            taxForm.setId(tax.getId().toString());
            taxForm.setCode(tax.getCode());
            taxForm.setVersion(tax.getVersion());
            taxForm.setName(tax.getName());
            taxForm.setDescription(tax.getDescription());
            taxForm.setPercent("" + tax.getPercent());
        }
        return taxForm;
    }
   
    public RetailerForm buildRetailerForm(final RequestData requestData, final Retailer retailer) throws Exception {
        final RetailerForm retailerForm = new RetailerForm();
        if(retailer != null){
            retailerForm.setId(retailer.getId().toString());
            retailerForm.setCode(retailer.getCode());
            retailerForm.setName(retailer.getName());
            retailerForm.setDescription(retailer.getDescription());
           
            retailerForm.setBrand(retailer.isBrand());
        retailerForm.setCorner(retailer.isCorner());
        retailerForm.setOfficialRetailer(retailer.isOfficialRetailer());
        retailerForm.setEcommerce(retailer.isEcommerce());
       
        if(retailer.getDefaultWarehouse() != null){
          retailerForm.setWarehouseId(retailer.getDefaultWarehouse().getId().toString());
        }

            if (retailer.getAddresses() != null) {
                RetailerAddress defaultAddress = retailer.getDefaultAddress();
                if (defaultAddress != null) {
                    retailerForm.setAddress1(defaultAddress.getAddress1());
                    retailerForm.setAddress2(defaultAddress.getAddress2());
                    retailerForm.setAddressAdditionalInformation(defaultAddress.getAddressAdditionalInformation());
                    retailerForm.setPostalCode(defaultAddress.getPostalCode());
                    retailerForm.setCity(defaultAddress.getCity());
                    retailerForm.setStateCode(defaultAddress.getStateCode());
                    retailerForm.setAreaCode(defaultAddress.getAreaCode());
                    retailerForm.setCountryCode(defaultAddress.getCountryCode());
                   
                    retailerForm.setLongitude(defaultAddress.getLongitude());
                    retailerForm.setLatitude(defaultAddress.getLatitude());

                    retailerForm.setPhone(defaultAddress.getPhone());
                    retailerForm.setMobile(defaultAddress.getMobile());
                    retailerForm.setFax(defaultAddress.getFax());
                    retailerForm.setEmail(defaultAddress.getEmail());
                    String websiteUrl = defaultAddress.getWebsite();
                    if (StringUtils.isNotEmpty(websiteUrl) && !websiteUrl.contains("http")) {
                        websiteUrl = "http://" + websiteUrl;
                    }
                    retailerForm.setWebsite(websiteUrl);
                }
            }
           
        }
        return retailerForm;
    }
   
    public StoreForm buildStoreForm(RequestData requestData, Store store) throws Exception {
      final StoreForm storeForm = new StoreForm();
      if(store != null){
        storeForm.setId(store.getId().toString());
        storeForm.setCode(store.getCode());
        storeForm.setName(store.getName());
        storeForm.setRetailerId(store.getRetailer().getId().toString());
       
        storeForm.setAddress1(store.getAddress1());
        storeForm.setAddress2(store.getAddress2());
        storeForm.setAddressAdditionalInformation(store.getAddressAdditionalInformation());
       
        storeForm.setAreaCode(store.getAreaCode());
        storeForm.setCity(store.getCity());
        storeForm.setCountryCode(store.getCountryCode());
        storeForm.setLatitude(store.getLatitude());
        storeForm.setLongitude(store.getLongitude());
        storeForm.setPostalCode(store.getPostalCode());
        storeForm.setStateCode(store.getStateCode());     
      }
     
      return storeForm;
    }
   
}
TOP

Related Classes of org.hoteia.qalingo.core.web.mvc.factory.BackofficeFormFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.