summaryrefslogtreecommitdiff
path: root/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx')
-rw-r--r--jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx99
1 files changed, 99 insertions, 0 deletions
diff --git a/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx b/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx
index d0dac260a354..1771bcc018a5 100644
--- a/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx
+++ b/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx
@@ -404,6 +404,105 @@ javaPluginError jfw_plugin_getJavaInfoByPath(
return errorcode;
}
+javaPluginError jfw_plugin_getJavaInfoFromJavaHome(
+ std::vector<pair<OUString, jfw::VersionInfo>> const& vecVendorInfos,
+ JavaInfo ** ppInfo)
+{
+ if (!ppInfo)
+ return JFW_PLUGIN_E_INVALID_ARG;
+
+ rtl::Reference<VendorBase> infoJavaHome = getJavaInfoFromJavaHome();
+
+ if (!infoJavaHome.is())
+ return JFW_PLUGIN_E_NO_JRE;
+
+ //Check if the detected JRE matches the version requirements
+ typedef std::vector<pair<OUString, jfw::VersionInfo>>::const_iterator ci_pl;
+ for (ci_pl vendorInfo = vecVendorInfos.begin(); vendorInfo != vecVendorInfos.end(); ++vendorInfo)
+ {
+ const OUString& vendor = vendorInfo->first;
+ jfw::VersionInfo versionInfo = vendorInfo->second;
+
+ if (vendor.equals(infoJavaHome->getVendor()))
+ {
+ javaPluginError errorcode = checkJavaVersionRequirements(
+ infoJavaHome,
+ versionInfo.sMinVersion,
+ versionInfo.sMaxVersion,
+ versionInfo.getExcludeVersions(),
+ versionInfo.getExcludeVersionSize());
+
+ if (errorcode == JFW_PLUGIN_E_NONE)
+ {
+ *ppInfo = createJavaInfo(infoJavaHome);
+ return JFW_PLUGIN_E_NONE;
+ }
+ }
+ }
+
+ return JFW_PLUGIN_E_NO_JRE;
+}
+
+javaPluginError jfw_plugin_getJavaInfosFromPath(
+ std::vector<std::pair<OUString, jfw::VersionInfo>> const& vecVendorInfos,
+ std::vector<JavaInfo*> & javaInfosFromPath)
+{
+ // find JREs from PATH
+ vector<rtl::Reference<VendorBase>> vecInfosFromPath;
+ createJavaInfoFromPath(vecInfosFromPath);
+
+ vector<rtl::Reference<VendorBase> > vecVerifiedInfos;
+
+ // copy JREs that meet version requirements to vecVerifiedInfos
+ typedef vector<rtl::Reference<VendorBase> >::iterator it;
+ for (it i= vecInfosFromPath.begin(); i != vecInfosFromPath.end(); ++i)
+ {
+ const rtl::Reference<VendorBase>& cur = *i;
+
+ typedef std::vector<pair<OUString, jfw::VersionInfo>>::const_iterator ci_pl;
+ for (ci_pl vendorInfo = vecVendorInfos.begin(); vendorInfo != vecVendorInfos.end(); ++vendorInfo)
+ {
+ const OUString& vendor = vendorInfo->first;
+ jfw::VersionInfo versionInfo = vendorInfo->second;
+
+ if (vendor.equals(cur->getVendor()))
+ {
+ javaPluginError errorcode = checkJavaVersionRequirements(
+ cur,
+ versionInfo.sMinVersion,
+ versionInfo.sMaxVersion,
+ versionInfo.getExcludeVersions(),
+ versionInfo.getExcludeVersionSize());
+
+ if (errorcode == JFW_PLUGIN_E_NONE)
+ {
+ vecVerifiedInfos.push_back(*i);
+ }
+ }
+ }
+ }
+
+ if (vecVerifiedInfos.empty())
+ return JFW_PLUGIN_E_NO_JRE;
+
+ // Now vecVerifiedInfos contains all those JREs which meet the version requirements
+ // Transfer them into the vector that is passed out.
+ vector<JavaInfo*> infosFromPath;
+
+ typedef vector<rtl::Reference<VendorBase> >::const_iterator cit;
+ for (cit ii = vecVerifiedInfos.begin(); ii != vecVerifiedInfos.end(); ++ii)
+ {
+ infosFromPath.push_back(createJavaInfo(*ii));
+ }
+
+ javaInfosFromPath = infosFromPath;
+
+ return JFW_PLUGIN_E_NONE;
+}
+
+
+
+
#if defined(WNT)
// Load msvcr71.dll using an explicit full path from where it is