/* * Copyright 2010 Red Hat, Inc. and/or its affiliates. * * 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.drools.eclipse.editors; import java.util.ArrayList; import java.util.List; import org.drools.eclipse.DroolsEclipsePlugin; import org.drools.eclipse.ProcessInfo; import org.drools.eclipse.flow.bpmn2.editor.BPMNModelEditor; import org.drools.eclipse.flow.ruleflow.core.RuleSetNodeWrapper; import org.drools.compiler.lang.descr.AttributeDescr; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.gef.EditPart; import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.Region; import org.eclipse.jface.text.hyperlink.IHyperlink; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.forms.editor.FormEditor; import org.eclipse.ui.ide.IDE; import org.jbpm.workflow.core.node.RuleSetNode; /** * hyperlink to ruleflow-group declaration. */ public class RuleFlowGroupHyperlink implements IHyperlink { AttributeDescr descr; ProcessInfo processInfo; List<RuleSetNode> nodes; public RuleFlowGroupHyperlink(AttributeDescr descr, ProcessInfo processInfo, List<RuleSetNode> nodes) { this.descr = descr; this.processInfo = processInfo; this.nodes = nodes; } public IRegion getHyperlinkRegion() { return new Region(descr.getStartCharacter(),descr.getEndCharacter()-descr.getStartCharacter()); } public String getTypeLabel() { return "drools-" + descr.getType(); //$NON-NLS-1$; } public String getHyperlinkText() { return "Open " + processInfo.getProcessId(); } public void open() { IResource resource = DroolsEclipsePlugin.getDefault().findProcessResource(processInfo.getProcessId()); if(resource!=null) { try { IWorkbench workbench = PlatformUI.getWorkbench(); IWorkbenchPage page = workbench.getActiveWorkbenchWindow().getActivePage(); IEditorPart editor = IDE.openEditor(page, (IFile) resource); if (editor instanceof FormEditor) { editor = ((FormEditor) editor).getActiveEditor(); } if (editor instanceof BPMNModelEditor) { EditPart editPart = (EditPart) editor.getAdapter(EditPart.class); List<EditPart> selectedParts = new ArrayList<EditPart>(); for (RuleSetNode node : nodes) { EditPart part = findEditPart(editPart,node); if(part!=null) selectedParts.add(part); } if(selectedParts.size()>0) ((BPMNModelEditor)editor).getSite().getSelectionProvider().setSelection(new StructuredSelection(selectedParts)); } } catch (Throwable t) { DroolsEclipsePlugin.log(t); } } } private EditPart findEditPart(EditPart root, RuleSetNode node) { for (Object element : root.getChildren()) { if (((EditPart)element).getModel() instanceof RuleSetNodeWrapper) { if(node.getId() == ((RuleSetNodeWrapper)(((EditPart)element).getModel())).getNode().getId()) { return (EditPart) element; } } else { EditPart result = findEditPart(((EditPart)element), node); if(result!=null) return result; } } return null; } }