it.eng.spagobi.meta.editor.business.menu.BusinessModelMenuActionFactory.java Source code

Java tutorial

Introduction

Here is the source code for it.eng.spagobi.meta.editor.business.menu.BusinessModelMenuActionFactory.java

Source

/**
 SpagoBI, the Open Source Business Intelligence suite
    
 Copyright (C) 2012 Engineering Ingegneria Informatica S.p.A. - SpagoBI Competency Center
 This Source Code Form is subject to the terms of the Mozilla Public
 License, v. 2.0. If a copy of the MPL was not distributed with this file,
 You can obtain one at http://mozilla.org/MPL/2.0/.
     
 **/
package it.eng.spagobi.meta.editor.business.menu;

import it.eng.spagobi.meta.editor.business.actions.AddBusinessRelationshipAction;
import it.eng.spagobi.meta.editor.business.actions.AddBusinessTableAction;
import it.eng.spagobi.meta.editor.business.actions.AddCalculatedFieldAction;
import it.eng.spagobi.meta.editor.business.actions.AddEmptyBusinessTableAction;
import it.eng.spagobi.meta.editor.business.actions.AddIdentifierAction;
import it.eng.spagobi.meta.editor.business.actions.AddIncomeBusinessRelationshipAction;
import it.eng.spagobi.meta.editor.business.actions.AddOutcomeBusinessRelationshipAction;
import it.eng.spagobi.meta.editor.business.actions.AddToIdentifierAction;
import it.eng.spagobi.meta.editor.business.actions.CreateQueryAction;
import it.eng.spagobi.meta.editor.business.actions.EditBusinessColumnsAction;
import it.eng.spagobi.meta.editor.business.actions.EditBusinessViewInnerJoinRelationshipsAction;
import it.eng.spagobi.meta.editor.business.actions.GenerateJPAMappingAction;
import it.eng.spagobi.meta.editor.business.actions.LinkToProfileAttributeAction;
import it.eng.spagobi.meta.editor.business.actions.RemoveFromIdentifierAction;
import it.eng.spagobi.meta.editor.olap.actions.CreateMondrianAction;
import it.eng.spagobi.meta.editor.olap.actions.EditHierarchiesAction;
import it.eng.spagobi.meta.editor.olap.actions.SetAttributeAction;
import it.eng.spagobi.meta.editor.olap.actions.SetCubeAction;
import it.eng.spagobi.meta.editor.olap.actions.SetDimensionAction;
import it.eng.spagobi.meta.editor.olap.actions.SetGenericAction;
import it.eng.spagobi.meta.editor.olap.actions.SetMeasureAction;
import it.eng.spagobi.meta.editor.olap.actions.SetTemporalDimensionAction;
import it.eng.spagobi.meta.editor.olap.actions.SetTimeDimensionAction;
import it.eng.spagobi.meta.initializer.OlapModelInitializer;
import it.eng.spagobi.meta.model.business.BusinessColumn;
import it.eng.spagobi.meta.model.business.BusinessColumnSet;
import it.eng.spagobi.meta.model.business.BusinessTable;
import it.eng.spagobi.meta.model.business.BusinessView;
import it.eng.spagobi.meta.model.business.CalculatedBusinessColumn;
import it.eng.spagobi.meta.model.business.SimpleBusinessColumn;
import it.eng.spagobi.meta.model.business.commands.ISpagoBIModelCommand;
import it.eng.spagobi.meta.model.olap.Cube;
import it.eng.spagobi.meta.model.phantom.provider.BusinessRootItemProvider;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.eclipse.emf.common.command.Command;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IEditorPart;

/**
 * This factory generate actions used in contextual menu
 * 
 * @author Andrea Gioia (andrea.gioia@eng.it)
 */
public class BusinessModelMenuActionFactory {
    public static OlapModelInitializer olapModelInitializer = new OlapModelInitializer();

    public static Map<String, Collection<IAction>> getActions(IEditorPart activeEditorPart,
            Collection<?> descriptors, ISelection selection) {
        Map actions = new HashMap();

        if (selection.isEmpty())
            return actions;

        IStructuredSelection sselection = (IStructuredSelection) selection;
        List<?> list = sselection.toList();
        Object target = list.get(0);

        if (target instanceof BusinessTable) {
            List editActions = new ArrayList();
            List olapActions = new ArrayList();

            if (((BusinessTable) target).getPhysicalTable() != null) {
                editActions.add(new AddIdentifierAction(activeEditorPart, selection));
                editActions.add(new EditBusinessColumnsAction(activeEditorPart, selection));
                editActions.add(new AddOutcomeBusinessRelationshipAction(activeEditorPart, selection));
                editActions.add(new AddIncomeBusinessRelationshipAction(activeEditorPart, selection));
                // editActions.add(new AddPhysicalTableToBusinessTableAction(activeEditorPart, selection));
                editActions.add(new AddCalculatedFieldAction(activeEditorPart, selection));

                // Add Olap Actions
                String tableType = getTableType((BusinessTable) target);
                if (tableType.equals(("generic"))) {
                    olapActions.add(new SetCubeAction(activeEditorPart, selection));
                    olapActions.add(new SetDimensionAction(activeEditorPart, selection));
                    olapActions.add(new SetTemporalDimensionAction(activeEditorPart, selection));
                    olapActions.add(new SetTimeDimensionAction(activeEditorPart, selection));

                } else if (tableType.equals(("cube"))) {
                    olapActions.add(new SetDimensionAction(activeEditorPart, selection));
                    olapActions.add(new SetGenericAction(activeEditorPart, selection));
                    olapActions.add(new SetTemporalDimensionAction(activeEditorPart, selection));
                    olapActions.add(new SetTimeDimensionAction(activeEditorPart, selection));

                } else if (tableType.contains(("dimension"))) {
                    olapActions.add(new SetCubeAction(activeEditorPart, selection));
                    olapActions.add(new SetGenericAction(activeEditorPart, selection));
                    olapActions.add(new EditHierarchiesAction(activeEditorPart, selection));
                }

            } else {
                editActions.add(new EditBusinessColumnsAction(activeEditorPart, selection));
            }
            actions.put("Edit", editActions);
            actions.put("Olap", olapActions);

        } else if (target instanceof BusinessView) {
            List editActions = new ArrayList();
            editActions.add(new AddIdentifierAction(activeEditorPart, selection));
            editActions.add(new EditBusinessColumnsAction(activeEditorPart, selection));
            editActions.add(new AddOutcomeBusinessRelationshipAction(activeEditorPart, selection));
            editActions.add(new AddIncomeBusinessRelationshipAction(activeEditorPart, selection));
            // editActions.add(new AddPhysicalTableToBusinessTableAction(activeEditorPart, selection));
            // editActions.add(new RemovePhysicalTableToBusinessViewAction(activeEditorPart, selection));
            editActions.add(new EditBusinessViewInnerJoinRelationshipsAction(activeEditorPart, selection));
            editActions.add(new AddCalculatedFieldAction(activeEditorPart, selection));
            actions.put("Edit", editActions);

            // List removeActions = new ArrayList();
            // removeActions.add(new RemovePhysicalTableToBusinessViewAction(activeEditorPart, selection));
            // actions.put("Remove", removeActions);
        } else if (target instanceof SimpleBusinessColumn) {
            List editActions = new ArrayList();
            List removeActions = new ArrayList();
            List olapActions = new ArrayList();

            BusinessColumn businessColumn = (BusinessColumn) target;
            if ((businessColumn.isIdentifier()) || (businessColumn.isPartOfCompositeIdentifier())) {
                RemoveFromIdentifierAction removeFromIdentifierAction = new RemoveFromIdentifierAction(
                        activeEditorPart, selection);
                Command command = removeFromIdentifierAction.getPerformFinishCommand();
                // Check if Command is executable
                if (command instanceof ISpagoBIModelCommand) {
                    removeActions.add(removeFromIdentifierAction);
                }
                actions.put("Edit", removeActions);
            } else {
                AddToIdentifierAction addToIdentifierAction = new AddToIdentifierAction(activeEditorPart,
                        selection);
                Command command = addToIdentifierAction.getPerformFinishCommand();
                // Check if Command is executable
                if (command instanceof ISpagoBIModelCommand) {
                    editActions.add(addToIdentifierAction);
                }
                actions.put("Edit", editActions);
            }

            // Link to ProfileAttribute
            LinkToProfileAttributeAction linkToProfileAttributeAction = new LinkToProfileAttributeAction(
                    activeEditorPart, selection);
            Command command = linkToProfileAttributeAction.getPerformFinishCommand();

            // Check if Command is executable
            if (command instanceof ISpagoBIModelCommand) {
                editActions.add(linkToProfileAttributeAction);
            }
            if (!removeActions.isEmpty()) {
                editActions.addAll(removeActions);
            }
            actions.put("Edit", editActions);

            // Cube commands
            Cube cube = checkIfInsideCube((BusinessColumn) target);
            if (cube != null) {
                String columnType = getColumnType((BusinessColumn) target);
                if (columnType.equals(("attribute"))) {
                    olapActions.add(new SetMeasureAction(activeEditorPart, selection));
                } else if (columnType.equals(("measure"))) {
                    olapActions.add(new SetAttributeAction(activeEditorPart, selection));
                }
                actions.put("Olap", olapActions);
            }

        } else if (target instanceof CalculatedBusinessColumn) {
            List editActions = new ArrayList();
            List removeActions = new ArrayList();
            CalculatedBusinessColumn businessColumn = (CalculatedBusinessColumn) target;
            editActions.add(new AddCalculatedFieldAction(activeEditorPart, selection));
            editActions.add(new LinkToProfileAttributeAction(activeEditorPart, selection));
            actions.put("Edit", editActions);

        } else if (target instanceof BusinessRootItemProvider) {
            List editActions = new ArrayList();
            editActions.add(new AddBusinessTableAction(activeEditorPart, selection, null));
            editActions.add(new AddEmptyBusinessTableAction(activeEditorPart, selection));
            editActions.add(new AddBusinessRelationshipAction(activeEditorPart, selection));
            actions.put("Edit", editActions);

            List generateActions = new ArrayList();
            generateActions.add(new CreateQueryAction(activeEditorPart, selection));
            generateActions.add(new GenerateJPAMappingAction(activeEditorPart, selection));
            generateActions.add(new CreateMondrianAction(activeEditorPart, selection));
            actions.put("Create", generateActions);

            // List queryActions = new ArrayList();
            // queryActions.add(new CreateQueryAction(activeEditorPart, selection));
            // actions.put("Query", queryActions);
        }

        return actions;
    }

    private static String getTableType(BusinessColumnSet businessColumnSet) {
        return businessColumnSet.getProperties().get("structural.tabletype").getValue();
    }

    private static String getColumnType(BusinessColumn businessColumn) {
        return businessColumn.getProperties().get("structural.columntype").getValue();
    }

    private static Cube checkIfInsideCube(BusinessColumn businessColumn) {
        return olapModelInitializer.getCube(businessColumn.getTable());
    }

}