/*
 * #%L
 * BroadleafCommerce Open Admin Platform
 * %%
 * Copyright (C) 2009 - 2013 Broadleaf Commerce
 * %%
 * 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.
 * #L%
 */
package org.broadleafcommerce.openadmin.web.service;

import org.broadleafcommerce.common.extension.AbstractExtensionHandler;
import org.broadleafcommerce.common.extension.ExtensionResultStatusType;
import org.broadleafcommerce.openadmin.dto.Entity;
import org.broadleafcommerce.openadmin.web.form.component.ListGridRecord;
import org.broadleafcommerce.openadmin.web.form.entity.EntityForm;

/**
 * Abstract class to provide convenience for determining how to handle form 
 * extensions in the admin
 * 
 * @author Kelly Tisdell
 * @author Phillip Verheyden (phillipuniverse)
 */
public abstract class AbstractFormBuilderExtensionHandler extends AbstractExtensionHandler implements FormBuilderExtensionHandler {

    /**
     * Determine if e to handle this.
     * @param ef
     * @return
     */
    protected abstract boolean canHandle(EntityForm ef);

    /**
     * Convenience method for {@link #modifyUnpopulatedEntityForm(EntityForm)}. See that method for usage documentation
     */
    protected abstract void handleModifyUnpopulatedEntityForm(EntityForm ef);
    
    /**
     * Convenience method for {@link #modifyPopulatedEntityForm(EntityForm, Entity)}. See that method for usage documentation
     */
    protected abstract void handleModifyPopulatedEntityForm(EntityForm ef, Entity entity);
    
    /**
     * Convenience method for {@link #modifyDetailEntityForm(EntityForm)}. See that method for usage documentation
     */
    protected abstract void handleModifyDetailEntityForm(EntityForm ef);

    @Override
    public ExtensionResultStatusType modifyUnpopulatedEntityForm(EntityForm ef) {
        if (canHandle(ef)) {
            handleModifyUnpopulatedEntityForm(ef);
            return ExtensionResultStatusType.HANDLED;
        }
        return ExtensionResultStatusType.NOT_HANDLED;
    }

    @Override
    public ExtensionResultStatusType modifyPopulatedEntityForm(EntityForm ef, Entity entity) {
        if (canHandle(ef)) {
            handleModifyPopulatedEntityForm(ef, entity);
            return ExtensionResultStatusType.HANDLED;
        }
        return ExtensionResultStatusType.NOT_HANDLED;
    }

    @Override
    public ExtensionResultStatusType modifyDetailEntityForm(EntityForm ef) {
        if (canHandle(ef)) {
            handleModifyDetailEntityForm(ef);
            return ExtensionResultStatusType.HANDLED;
        }
        return ExtensionResultStatusType.NOT_HANDLED;
    }
    
    @Override
    public ExtensionResultStatusType modifyListGridRecord(String className, ListGridRecord record, Entity entity) {
        return ExtensionResultStatusType.NOT_HANDLED;
    }
    
    @Override
    public ExtensionResultStatusType addAdditionalFormActions(EntityForm entityForm) {
        return ExtensionResultStatusType.NOT_HANDLED;
    }
    
}

@@ -1395,1049 +1395,99 @@
     
-/**%0A     * Determine if e to handle this.%0A     * @param ef%0A     * @return%0A     */%0A    protected abstract boolean canHandle(EntityForm ef);%0A%0A    /**%0A     * Convenience method for %7B@link #modifyUnpopulatedEntityForm(EntityForm)%7D. See that method for usage documentation%0A     */%0A    protected abstract void handleModifyUnpopulatedEntityForm(EntityForm ef);%0A    %0A    /**%0A     * Convenience method for %7B@link #modifyPopulatedEntityForm(EntityForm, Entity)%7D. See that method for usage documentation%0A     */%0A    protected abstract void handleModifyPopulatedEntityForm(EntityForm ef, Entity entity);%0A    %0A    /**%0A     * Convenience method for %7B@link #modifyDetailEntityForm(EntityForm)%7D. See that method for usage documentation%0A     */%0A    protected abstract void handleModifyDetailEntityForm(EntityForm ef);%0A%0A    @Override%0A    public ExtensionResultStatusType modifyUnpopulatedEntityForm(EntityForm ef) %7B%0A        if (canHandle(ef)) %7B%0A            handleModifyUnpopulatedEntityForm(ef);%0A            return ExtensionResultStatusType.HANDLED;%0A        %7D
+@Override%0A    public ExtensionResultStatusType modifyUnpopulatedEntityForm(EntityForm ef) %7B
 %0A   
@@ -1657,158 +1657,8 @@
 ) %7B%0A
-        if (canHandle(ef)) %7B%0A            handleModifyPopulatedEntityForm(ef, entity);%0A            return ExtensionResultStatusType.HANDLED;%0A        %7D%0A
     
@@ -1809,147 +1809,8 @@
 ) %7B%0A
-        if (canHandle(ef)) %7B%0A            handleModifyDetailEntityForm(ef);%0A            return ExtensionResultStatusType.HANDLED;%0A        %7D%0A
     

Fix FormBuilderExtensionHandler abstract implementation