/*******************************************************************************
* 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.utils;
import com.google.inject.Provider;
import com.google.inject.Singleton;
import org.eclipse.che.api.core.ServerException;
import org.eclipse.che.api.project.server.ProjectManager;
import org.eclipse.che.api.project.server.VirtualFileEntry;
import org.eclipse.che.api.vfs.Path;
import org.eclipse.che.plugin.zdb.server.ZendDebugger;
import javax.inject.Inject;
import java.io.File;
/**
* Zend debug utils.
*
* @author Bartlomiej Laczkowski
*/
@Singleton
public class ZendDbgFileUtils {
private static Provider<ProjectManager> projectManagerProvider;
@Inject
public ZendDbgFileUtils(Provider<ProjectManager> projectManagerProvider) {
ZendDbgFileUtils.projectManagerProvider = projectManagerProvider;
}
/**
* Finds local file entry that corresponds to remote file path.
*
* @param remotePath
* @return corresponding local file entry
*/
public static VirtualFileEntry findVirtualFileEntry(String remotePath) {
Path remoteFilePath = Path.of(remotePath);
try {
for (int i = 0; i < remoteFilePath.length(); i++) {
Path path = remoteFilePath.subPath(i);
VirtualFileEntry child = getVirtualFileEntry(path.toString());
if (child != null) {
return child;
}
}
} catch (Exception e) {
ZendDebugger.LOG.error(e.getMessage(), e);
return null;
}
return null;
}
/**
* Returns local file absolute path.
*
* @param vfsPath
* @return local file absolute path
*/
public static String findAbsolutePath(String vfsPath) {
VirtualFileEntry virtualFileEntry = getVirtualFileEntry(vfsPath);
if (virtualFileEntry != null) {
File ioFile = virtualFileEntry.getVirtualFile().toIoFile();
if (ioFile != null) {
return ioFile.getAbsolutePath();
}
return virtualFileEntry.getVirtualFile().getPath().toString();
}
return vfsPath;
}
private static VirtualFileEntry getVirtualFileEntry(String path) {
VirtualFileEntry virtualFileEntry = null;
try {
virtualFileEntry = projectManagerProvider.get().getProjectsRoot().getChild(path);
} catch (ServerException e) {
ZendDebugger.LOG.error(e.getMessage(), e);
}
return virtualFileEntry;
}
}