blob: 7b8d0efbfaf523e4b768e8dfbdd81bb066ad62b4 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013, 2018 Red Hat, Inc.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Neil Guzman - python implementation (B#350065)
*******************************************************************************/
package org.eclipse.linuxtools.internal.rpmstubby.model;
import java.io.IOException;
import java.util.List;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.linuxtools.internal.rpmstubby.StubbyLog;
import org.eclipse.linuxtools.internal.rpmstubby.parser.CommonMetaData;
import org.eclipse.linuxtools.internal.rpmstubby.parser.PythonEggParser;
import org.eclipse.linuxtools.internal.rpmstubby.parser.ValidLicenses;
/**
* Gives easy access to data from the python setup.py file.
*
*/
public class EggModel {
private static final String[] VALID_LICENSES = {
ValidLicenses.GPL,
ValidLicenses.ARTISTIC,
ValidLicenses.MIT,
ValidLicenses.APACHE,
ValidLicenses.PUBLIC_DOMAIN,
ValidLicenses.ZLIB,
ValidLicenses.RICOH_SOURCE_CODE,
ValidLicenses.VOVIDA_SOFTWARE,
ValidLicenses.INTEL_OPEN_SOURCE,
ValidLicenses.LGPL,
ValidLicenses.BSD,
ValidLicenses.QPL,
ValidLicenses.IBM_PUBLIC,
ValidLicenses.PHP,
ValidLicenses.MODIFIED_CNRI_OPEN_SOURCE,
ValidLicenses.CVW,
ValidLicenses.PYTHON,
ValidLicenses.SUN_INTERNET_STANDARDS_SOURCE,
ValidLicenses.JABBER_OPEN_SOURCE
};
private static final String LONG_DESCRIPTION = "long_description";
private static final String CLASSIFIERS = "classifiers";
private static final String INSTALL_REQUIRES = "install_requires";
private static final String FIX_ME = "#FIXME";
private PythonEggParser pyEggParser;
/**
* Python egg setup.py file
*
* @param file The Python setup.py file
*/
public EggModel(IFile file) {
try {
pyEggParser = new PythonEggParser(file);
} catch (IOException | CoreException e) {
StubbyLog.logError(e);
}
}
/**
* Get the value from one of the setup options.
* If the value is empty, it will return #FIXME
* It will also return #FIX_ME if it looks like a function
*
* @param option The option from the setup(...) function to get value of
* @return The value of the option
*/
private String getValue(String option) {
String str = pyEggParser.getValue(option);
if (str.isEmpty() || pyEggParser.checkFunction(str)) {
str = FIX_ME;
}
return str;
}
/**
* Get the values from the classifiers option and
* check to see if the keyword is in one of them
*
* @param keyword What to check for within the list of values in classifiers
* @return The value within classifiers that contains the keyword
*/
private String getClassifiersList(String keyword) {
String rc = "";
List<String> list = pyEggParser.getValueList(CLASSIFIERS);
for (String str : list) {
if (str.toLowerCase().contains(keyword)) {
rc = str;
}
}
return rc;
}
/**
* Get the values from the install_requires option
*
* @return The values within install_requires
*/
public List<String> getInstallRequiresList() {
return pyEggParser.getValueList(INSTALL_REQUIRES);
}
/**
* Returns the package name.
*
* @return The package name.
*/
public String getSimplePackageName() {
return getValue(CommonMetaData.NAME);
}
/**
* The simple package name with "python-" prepended to make better RPM package name.
*
* @return The package
*/
public String getPackageName() {
String simpleName = getSimplePackageName();
if (simpleName.startsWith("python-")) {
return simpleName;
}
return "python-"+simpleName;
}
/**
* Returns the version
*
* @return The version
*/
public String getVersion() {
String version = getValue(CommonMetaData.VERSION);
if (!hasDigits(version)) {
version = "1 " + FIX_ME;
}
return version;
}
/**
* Utitlity method to try and see if a string contains
* digits within it
*
* @param str The string to check if it has digits
* @return True if string contains digits
*/
public boolean hasDigits(String str) {
return str.matches(".*\\d.*");
}
/**
* Returns the summary
*
* @return The package summary
*/
public String getSummary() {
return getValue(LONG_DESCRIPTION);
}
/**
* Returns the license
*
* @return The license
*/
public String getLicense() {
String rawLicense = getClassifiersList(CommonMetaData.LICENSE).toLowerCase();
String license = "";
for (String valid : VALID_LICENSES) {
if (rawLicense.contains(valid.toLowerCase())) {
license += valid + ", ";
}
}
if (!license.isEmpty()) {
license = license.substring(0, license.length()-2);
} else {
license = FIX_ME;
}
return license;
}
/**
* Returns the url
*
* @return The url
*/
public String getURL() {
return getValue(CommonMetaData.URL);
}
/**
* Returns the description
*
* @return The description
*/
public String getDescription() {
return getValue(CommonMetaData.DESCRIPTION);
}
}