Search in sources :

Example 1 with AbstractDBTreeContextAction

use of org.talend.sqlbuilder.dbstructure.actions.AbstractDBTreeContextAction in project tdi-studio-se by Talend.

the class DBTreeActionGroup method getContextActions.

/**
     * Loop through all extensions and add the appropriate actions.
     * 
     * Actions are selected by database product name, node type and
     * availability.
     * 
     * @param nodes currently selected nodes
     * @return array of actions
     */
//$NON-NLS-1$
@SuppressWarnings("unchecked")
private IAction[] getContextActions(INode[] nodes) {
    String databaseProductName = nodes[0].getSession().getRoot().getDatabaseProductName().toLowerCase().trim();
    String nodeType = nodes[0].getType().toLowerCase().trim();
    List actions = new ArrayList();
    IExtensionRegistry registry = Platform.getExtensionRegistry();
    //$NON-NLS-1$ //$NON-NLS-2$
    IExtensionPoint point = registry.getExtensionPoint("net.sourceforge.sqlexplorer", "nodeContextAction");
    IExtension[] extensions = point.getExtensions();
    for (int i = 0; i < extensions.length; i++) {
        IExtension e = extensions[i];
        IConfigurationElement[] ces = e.getConfigurationElements();
        for (int j = 0; j < ces.length; j++) {
            try {
                boolean isValidProduct = false;
                boolean isValidNodeType = false;
                //$NON-NLS-1$
                String id = ces[j].getAttribute("id");
                //$NON-NLS-1$ //$NON-NLS-2$
                String[] validProducts = ces[j].getAttribute("database-product-name").split(",");
                //$NON-NLS-1$ //$NON-NLS-2$
                String[] validNodeTypes = ces[j].getAttribute("node-type").split(",");
                //$NON-NLS-1$
                String imagePath = ces[j].getAttribute("icon");
                // check if action is valid for current database product
                for (int k = 0; k < validProducts.length; k++) {
                    String product = validProducts[k].toLowerCase().trim();
                    if (product.length() == 0) {
                        continue;
                    }
                    if (product.equals("*")) {
                        //$NON-NLS-1$
                        isValidProduct = true;
                        break;
                    }
                    //$NON-NLS-1$
                    String regex = TextUtil.replaceChar(product, '*', ".*");
                    if (databaseProductName.matches(regex)) {
                        isValidProduct = true;
                        break;
                    }
                }
                if (!isValidProduct) {
                    continue;
                }
                // check if action is valid for current node type
                for (int k = 0; k < validNodeTypes.length; k++) {
                    String type = validNodeTypes[k].toLowerCase().trim();
                    if (type.length() == 0) {
                        continue;
                    }
                    if (type.equals("*")) {
                        //$NON-NLS-1$
                        isValidNodeType = true;
                        break;
                    }
                    //$NON-NLS-1$
                    String regex = TextUtil.replaceChar(type, '*', ".*");
                    if (nodeType.matches(regex)) {
                        isValidNodeType = true;
                        break;
                    }
                }
                if (!isValidNodeType) {
                    continue;
                }
                // check if the action thinks it is suitable..
                //$NON-NLS-1$
                AbstractDBTreeContextAction action = (AbstractDBTreeContextAction) ces[j].createExecutableExtension("class");
                action.setSelectedNodes(nodes);
                action.setTreeViewer(pTreeViewer);
                action.setView(pView);
                String fragmentId = id.substring(0, id.indexOf('.', END_INDEX));
                if (imagePath != null && imagePath.trim().length() != 0) {
                    action.setImageDescriptor(ImageUtil.getFragmentDescriptor(fragmentId, imagePath));
                }
                if (action.isAvailable()) {
                    actions.add(action);
                }
            } catch (Throwable ex) {
                //$NON-NLS-1$
                SqlBuilderPlugin.log(Messages.getString("DBTreeActionGroup.logMessage"), ex);
            }
        }
    }
    return (IAction[]) actions.toArray(new IAction[] {});
}
Also used : IAction(org.eclipse.jface.action.IAction) ArrayList(java.util.ArrayList) IConfigurationElement(org.eclipse.core.runtime.IConfigurationElement) IExtensionPoint(org.eclipse.core.runtime.IExtensionPoint) IExtensionPoint(org.eclipse.core.runtime.IExtensionPoint) IExtension(org.eclipse.core.runtime.IExtension) AbstractDBTreeContextAction(org.talend.sqlbuilder.dbstructure.actions.AbstractDBTreeContextAction) ArrayList(java.util.ArrayList) List(java.util.List) IExtensionRegistry(org.eclipse.core.runtime.IExtensionRegistry)

Aggregations

ArrayList (java.util.ArrayList)1 List (java.util.List)1 IConfigurationElement (org.eclipse.core.runtime.IConfigurationElement)1 IExtension (org.eclipse.core.runtime.IExtension)1 IExtensionPoint (org.eclipse.core.runtime.IExtensionPoint)1 IExtensionRegistry (org.eclipse.core.runtime.IExtensionRegistry)1 IAction (org.eclipse.jface.action.IAction)1 AbstractDBTreeContextAction (org.talend.sqlbuilder.dbstructure.actions.AbstractDBTreeContextAction)1