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[] {});
}
Aggregations