/*
* Copyright 2015 Nokia Solutions and Networks
* Licensed under the Apache License, Version 2.0,
* see license.txt file for details.
*/
package org.robotframework.ide.eclipse.main.plugin.project.build.libs;
import java.io.File;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.Path;
import org.rf.ide.core.executor.EnvironmentSearchPaths;
import org.rf.ide.core.executor.RobotRuntimeEnvironment;
import org.rf.ide.core.executor.RobotRuntimeEnvironment.RobotEnvironmentException;
public class PythonLibraryLibdocGenerator implements ILibdocGenerator {
private final String libName;
private final String libPath;
private final IFile targetSpecFile;
public PythonLibraryLibdocGenerator(final String libName, final String path, final IFile targetSpecFile) {
this.libName = libName;
this.libPath = path;
this.targetSpecFile = targetSpecFile;
}
@Override
public void generateLibdoc(final RobotRuntimeEnvironment runtimeEnvironment,
final EnvironmentSearchPaths additionalPaths) throws RobotEnvironmentException {
final File libFile = new File(libPath);
final String additionalLocation = libFile.isFile() ? libFile.getParent() : extractLibParent();
additionalPaths.addPythonPath(additionalLocation);
runtimeEnvironment.createLibdocForThirdPartyLibrary(libName, additionalLocation, additionalPaths,
targetSpecFile.getLocation().toFile());
}
@Override
public void generateLibdocForcibly(final RobotRuntimeEnvironment runtimeEnvironment,
final EnvironmentSearchPaths additionalPaths)
throws RobotEnvironmentException {
final File libFile = new File(libPath);
final String additionalLocation = libFile.isFile() ? libFile.getParent() : extractLibParent();
additionalPaths.addPythonPath(additionalLocation);
runtimeEnvironment.createLibdocForThirdPartyLibraryForcibly(libName, additionalLocation, additionalPaths,
targetSpecFile.getLocation().toFile());
}
@Override
public String getMessage() {
return "generating libdoc for " + libName + " library contained in " + libPath;
}
private String extractLibParent() { //e.g. libPath=Project1/Plib/ca libName=Plib.ca.ab => parent=Project1
String parent = libPath;
final String[] libNameElements = libName.split("\\.");
if (libNameElements.length > 1) {
for (int i = libNameElements.length - 2; i >= 0; i--) {
if (libNameElements[i].equals(new Path(parent).lastSegment())) {
parent = new Path(parent).removeLastSegments(1).toPortableString();
}
}
}
return parent;
}
}