All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.broadleafcommerce.cms.admin.client.presenter.RuleBasedPresenterInitializer Maven / Gradle / Ivy

/*
 * Copyright 2008-2012 the original author or authors.
 *
 * Licensed 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.broadleafcommerce.cms.admin.client.presenter;

import com.smartgwt.client.data.AdvancedCriteria;
import com.smartgwt.client.data.Criteria;
import com.smartgwt.client.data.DSCallback;
import com.smartgwt.client.data.DSRequest;
import com.smartgwt.client.data.DSResponse;
import com.smartgwt.client.data.Record;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.form.FilterBuilder;
import org.broadleafcommerce.cms.admin.client.presenter.structure.FilterType;
import org.broadleafcommerce.cms.admin.client.view.structure.RulesDisplayIf;
import org.broadleafcommerce.openadmin.client.BLCMain;
import org.broadleafcommerce.openadmin.client.datasource.dynamic.DynamicEntityDataSource;
import org.broadleafcommerce.openadmin.client.presenter.entity.DynamicEntityPresenter;
import org.broadleafcommerce.openadmin.client.translation.IncompatibleMVELTranslationException;
import org.broadleafcommerce.openadmin.client.translation.MVELToAdvancedCriteriaTranslator;
import org.broadleafcommerce.openadmin.client.view.dynamic.ItemBuilderDisplay;

import java.util.HashMap;
import java.util.Map;

public abstract class RuleBasedPresenterInitializer {

    public static Map ATTRIBUTEMAP = new HashMap();

    static {
        ATTRIBUTEMAP.put(FilterType.PRODUCT, "productRule");
        ATTRIBUTEMAP.put(FilterType.REQUEST, "requestRule");
        ATTRIBUTEMAP.put(FilterType.CUSTOMER, "customerRule");
        ATTRIBUTEMAP.put(FilterType.TIME, "timeRule");
    
    }
    
    private static final MVELToAdvancedCriteriaTranslator TRANSLATOR = new MVELToAdvancedCriteriaTranslator();
    protected U presenter;
    protected DynamicEntityDataSource offerItemCriteriaDataSource;
    protected DynamicEntityDataSource orderItemDataSource;

    public RuleBasedPresenterInitializer() {
        super();
    }

    protected V getDisplay() {
        return (V) presenter.getDisplay();
    }

    public void initFilterBuilder(FilterBuilder filterBuilder, String rule) {
        filterBuilder.clearCriteria();
        if (rule != null) {
            try {
                AdvancedCriteria myCriteria = TRANSLATOR.createAdvancedCriteria(rule, filterBuilder.getDataSource());
                if (myCriteria != null) {
                    filterBuilder.setCriteria(myCriteria);
                }
            } catch (IncompatibleMVELTranslationException e) {
                throw new RuntimeException(BLCMain.getMessageManager().getString("mvelTranslationProblem"), e);
            }
        }
    }

    public void initItemQualifiers(final Record selectedRecord, final boolean disabled) {
        Criteria relationshipCriteria = offerItemCriteriaDataSource.createRelationshipCriteria(offerItemCriteriaDataSource.getPrimaryKeyValue(selectedRecord));
        offerItemCriteriaDataSource.fetchData(relationshipCriteria, new DSCallback() {
            public void execute(DSResponse response, Object rawData, DSRequest request) {
            getDisplay().removeAllItemBuilders();
            for (Record record : response.getData()) {
                if (Integer.parseInt(record.getAttribute("quantity")) > 0) {
                    final ItemBuilderDisplay display = getDisplay().addItemBuilder(orderItemDataSource);
                    display.setDirty(false);
                    if (disabled) {
                        display.disable();
                    }
                    bindItemBuilderEvents(display);
                    
                    display.getItemFilterBuilder().clearCriteria();
                    display.setRecord(record);
                    display.getItemQuantity().setValue(Integer.parseInt(record.getAttribute("quantity")));
                    try {
                        display.getItemFilterBuilder().setVisible(true);
                        display.getRawItemForm().setVisible(false);
                        AdvancedCriteria myCriteria = TRANSLATOR.createAdvancedCriteria(record.getAttribute("orderItemMatchRule"), orderItemDataSource);
                        if (myCriteria != null) {
                            display.getItemFilterBuilder().setCriteria(myCriteria);
                        }
                    } catch (IncompatibleMVELTranslationException e) {
                        throw new RuntimeException(BLCMain.getMessageManager().getString("mvelTranslationProblem"), e);
                    }
                    display.getRemoveButton().addClickHandler(new ClickHandler() {
                        public void onClick(ClickEvent event) {
                            getDisplay().removeItemBuilder(display);
                        }
                    });
                }
            }
            }

            
        });
    }

    protected abstract void bindItemBuilderEvents(ItemBuilderDisplay display);
    
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy