| /******************************************************************************* |
| * Copyright (c) 2009, 2014 Xored Software Inc and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Xored Software Inc - initial API and implementation and/or initial documentation |
| *******************************************************************************/ |
| package org.eclipse.rcptt.tesla.nebula.ecl.internal.impl.commands; |
| |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.rcptt.ecl.core.Command; |
| import org.eclipse.rcptt.ecl.dispatch.IScriptletExtension; |
| import org.eclipse.rcptt.ecl.runtime.IProcess; |
| import org.eclipse.rcptt.tesla.core.protocol.ElementKind; |
| import org.eclipse.rcptt.tesla.ecl.impl.TeslaBridge; |
| import org.eclipse.rcptt.tesla.ecl.model.ControlHandler; |
| import org.eclipse.rcptt.tesla.ecl.model.GetItem; |
| import org.eclipse.rcptt.tesla.ecl.model.Selector; |
| import org.eclipse.rcptt.tesla.ecl.model.TeslaFactory; |
| import org.eclipse.rcptt.tesla.nebula.ecl.NebulaElementKinds; |
| import org.eclipse.rcptt.util.TableTreeItemPathUtil; |
| |
| /** |
| * Special logic for getting Nebula Grid items. |
| */ |
| public class SelectorServiceExtension implements IScriptletExtension { |
| |
| @Override |
| public boolean canHandle(Command c) { |
| if (c instanceof GetItem) { |
| ControlHandler parent = ((GetItem) c).getParent(); |
| while (parent != null) { |
| if (ElementKind.Item == parent.getKind()) // subitems too |
| parent = parent.getParent(); |
| else |
| return NebulaElementKinds.GRID.equals(parent.getCustomKindId()); |
| } |
| } |
| return false; |
| } |
| |
| @Override |
| public IStatus service(Command command, IProcess context) throws InterruptedException, CoreException { |
| TeslaBridge.waitDelay(); |
| |
| ControlHandler handler = TeslaFactory.eINSTANCE.createControlHandler(); |
| Selector selector = (Selector) command; |
| ControlHandler parent = selector.getParent(); |
| |
| if (selector instanceof GetItem |
| // && ((GetItem) selector).getPath() != null |
| && ElementKind.Item.equals(parent.getKind()) |
| && parent.getPath() != null) { |
| String path = parent.getPath(); |
| |
| // if path isn't specified, any item is matched |
| String childPath = ((GetItem) selector).getPath(); |
| path += "/" + (childPath == null ? ".*" : childPath); |
| // |
| |
| Integer index = ((GetItem) selector).getIndex(); |
| String column = ((GetItem) selector).getColumn(); |
| if (index != null) { |
| path += "%" + index + "%"; |
| } |
| if (column != null) { |
| path += TableTreeItemPathUtil.COLUMN_DELIMITER |
| + column |
| + TableTreeItemPathUtil.COLUMN_DELIMITER; |
| } |
| handler.setKind(ElementKind.Item); |
| handler.setParent(parent.getParent()); |
| handler.setPath(path); |
| TeslaBridge.find(handler); |
| context.getOutput().write(handler); |
| return Status.OK_STATUS; |
| } |
| |
| handler.setParent(selector.getParent()); |
| handler.setAfter(selector.getAfter()); |
| if (selector instanceof GetItem) { |
| GetItem ge = (GetItem) selector; |
| |
| // if path isn't specified, any item is matched |
| if (ge.getPath() == null) |
| ge.setPath(".*"); |
| // |
| |
| if (selector.getIndex() != null) { |
| ge.setPath(ge.getPath() + "%" + selector.getIndex() + "%"); |
| } |
| String column = ge.getColumn(); |
| if (column != null) { |
| ge.setPath(TableTreeItemPathUtil.appendFullPathColumnName(ge.getPath(), column)); |
| } |
| |
| // |
| handler.setKind(ElementKind.Item); |
| handler.setPath(((GetItem) selector).getPath()); |
| } |
| |
| // |
| TeslaBridge.find(handler); |
| |
| context.getOutput().write(handler); |
| TeslaBridge.waitExecution(); |
| return Status.OK_STATUS; |
| } |
| |
| |
| |
| } |