package org.archstudio.prolog.archstudio; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.archstudio.eclipse.ui.IFocusEditorListener; import org.archstudio.myx.fw.IMyxBrick; import org.archstudio.myx.fw.MyxRegistry; import org.archstudio.sysutils.SystemUtils; import org.archstudio.xarchadt.IXArchADT; import org.archstudio.xarchadt.ObjRef; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorReference; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.console.IHyperlink; import org.eclipse.ui.console.IPatternMatchListenerDelegate; import org.eclipse.ui.console.PatternMatchEvent; import org.eclipse.ui.console.TextConsole; public class ObjRefPatternMatchListenerDelegate implements IPatternMatchListenerDelegate { static class Hyperlink implements IHyperlink { final long uid; public Hyperlink(long uid) { this.uid = uid; } @Override public void linkEntered() { } @Override public void linkExited() { } @Override public void linkActivated() { for (IEditorReference p : PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() .getEditorReferences()) { IEditorPart e = p.getEditor(false); if (e instanceof IFocusEditorListener) { IMyxBrick brick = MyxRegistry.getSharedInstance().getBrick(PrologMyxComponent.class); if (brick != null) { IXArchADT xarch = SystemUtils.firstOrNull(MyxRegistry.getSharedInstance().getObjects(brick, IXArchADT.class)); if (xarch != null) { ObjRef objRef = ObjRef.lookupObjRef(uid); if (objRef != null) { ((IFocusEditorListener) e).focusEditor(new ObjRef[] { objRef }); } } } } } } } TextConsole console = null; @Override public void connect(TextConsole console) { this.console = console; } @Override public void disconnect() { this.console = null; } @Override public void matchFound(PatternMatchEvent event) { try { String objRefText = console.getDocument().get(event.getOffset(), event.getLength()); Matcher m = Pattern.compile("[0-9]+").matcher(objRefText); if (m.find()) { long uid = Long.parseLong(m.group(0)); console.addHyperlink(new Hyperlink(uid), event.getOffset(), event.getLength()); } } catch (Exception e) { e.printStackTrace(); } } }