/******************************************************************************* * Copyright (c) 2016 Rogue Wave Software, Inc. * 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: * Rogue Wave Software, Inc. - initial API and implementation *******************************************************************************/ package org.eclipse.che.plugin.zdb.server; import org.eclipse.che.api.debug.shared.model.Location; import org.eclipse.che.api.debug.shared.model.impl.LocationImpl; import org.eclipse.che.api.project.server.VirtualFileEntry; import org.eclipse.che.api.vfs.Path; import org.eclipse.che.plugin.zdb.server.utils.ZendDbgFileUtils; /** * Zend debugger location handler. This class is responsible for bidirectional * mapping/converting locations that are specific for Che Virtual File System * and Zend Debugger engine local file system. * * @author Bartlomiej Laczkowski */ public class ZendDbgLocationHandler { public static final Location createVFS(String target, String resourcePath, String resourceProjectPath, int lineNumber) { return new LocationImpl(target, lineNumber, resourcePath, false, 0, resourceProjectPath); } public static final Location createDBG(String resourcePath, int lineNumber) { return new LocationImpl(Path.of(resourcePath).getName(), lineNumber, resourcePath, false, 0, null); } /** * Convert DBG specific location to VFS one. * * @param dbgLocation * @return VFS specific location. */ public Location convertToVFS(Location dbgLocation) { VirtualFileEntry localFileEntry = ZendDbgFileUtils.findVirtualFileEntry(dbgLocation.getResourcePath()); if (localFileEntry == null) { return null; } String resourceProjectPath = localFileEntry.getProject(); String target = localFileEntry.getName(); String resourcePath = localFileEntry.getPath().toString(); int lineNumber = dbgLocation.getLineNumber(); return new LocationImpl(target, lineNumber, resourcePath, false, 0, resourceProjectPath); } /** * Convert VFS specific location to DBG one. * * @param dbgLocation * @return DBG specific location. */ public Location convertToDBG(Location vfsLocation) { String resourcePath = ZendDbgFileUtils.findAbsolutePath(vfsLocation.getResourcePath()); int lineNumber = vfsLocation.getLineNumber(); return new LocationImpl(null, lineNumber, resourcePath, false, 0, null); } }