< prev index next >

src/java.desktop/windows/native/libawt/windows/ShellFolder2.cpp

Print this page




1246     Java_sun_awt_shell_Win32ShellFolder2_compareIDsByColumn
1247             (JNIEnv* env, jclass cls, jlong jpParentIShellFolder,
1248             jlong pIDL1, jlong pIDL2, jint columnIdx)
1249 {
1250     IShellFolder* pParentIShellFolder = (IShellFolder*)jpParentIShellFolder;
1251     if (pParentIShellFolder == NULL) {
1252         return 0;
1253     }
1254 
1255     HRESULT hr = pParentIShellFolder->CompareIDs(
1256                                             (UINT) columnIdx,
1257                                             (LPCITEMIDLIST) pIDL1,
1258                                             (LPCITEMIDLIST) pIDL2);
1259     if (SUCCEEDED (hr)) {
1260         return (jint) (short) HRESULT_CODE(hr);
1261     }
1262 
1263     return 0;
1264 }
1265 





































































































































1266 
1267 } // extern "C"


1246     Java_sun_awt_shell_Win32ShellFolder2_compareIDsByColumn
1247             (JNIEnv* env, jclass cls, jlong jpParentIShellFolder,
1248             jlong pIDL1, jlong pIDL2, jint columnIdx)
1249 {
1250     IShellFolder* pParentIShellFolder = (IShellFolder*)jpParentIShellFolder;
1251     if (pParentIShellFolder == NULL) {
1252         return 0;
1253     }
1254 
1255     HRESULT hr = pParentIShellFolder->CompareIDs(
1256                                             (UINT) columnIdx,
1257                                             (LPCITEMIDLIST) pIDL1,
1258                                             (LPCITEMIDLIST) pIDL2);
1259     if (SUCCEEDED (hr)) {
1260         return (jint) (short) HRESULT_CODE(hr);
1261     }
1262 
1263     return 0;
1264 }
1265 
1266 /*
1267  * Class:     sun_awt_shell_Win32ShellFolder2
1268  * Method:    loadKnownFolders
1269  * Signature: (V)[BLsun/awt/shell/Win32ShellFolder2$KnownfolderDefenition;
1270  */
1271 JNIEXPORT jobjectArray JNICALL Java_sun_awt_shell_Win32ShellFolder2_loadKnownFolders
1272     (JNIEnv* env, jclass cls )
1273 {
1274     CoInitialize(NULL);
1275     IKnownFolderManager* pkfm = NULL;
1276     HRESULT hr = CoCreateInstance(CLSID_KnownFolderManager, NULL,
1277                                 CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pkfm));
1278     if(!SUCCEEDED(hr)) return NULL;
1279 
1280     jclass cl = env->FindClass("sun/awt/shell/Win32ShellFolder2$KnownfolderDefenition");
1281     jfieldID field_guid = env->GetFieldID(cl, "guid", "Ljava/lang/String;");
1282     jfieldID field_name = env->GetFieldID(cl, "name", "Ljava/lang/String;");
1283     jfieldID field_description = env->GetFieldID(cl, "description", "Ljava/lang/String;");
1284     jfieldID field_parent = env->GetFieldID(cl, "parent", "Ljava/lang/String;");
1285     jfieldID field_relativePath = env->GetFieldID(cl, "relativePath", "Ljava/lang/String;");
1286     jfieldID field_parsingName = env->GetFieldID(cl, "parsingName", "Ljava/lang/String;");
1287     jfieldID field_tooltip = env->GetFieldID(cl, "tooltip", "Ljava/lang/String;");
1288     jfieldID field_localizedName = env->GetFieldID(cl, "localizedName", "Ljava/lang/String;");
1289     jfieldID field_icon = env->GetFieldID(cl, "icon", "Ljava/lang/String;");
1290     jfieldID field_security = env->GetFieldID(cl, "security", "Ljava/lang/String;");
1291     jfieldID field_path = env->GetFieldID(cl, "path", "Ljava/lang/String;");
1292     jfieldID field_saveLocation = env->GetFieldID(cl, "saveLocation", "Ljava/lang/String;");
1293     jfieldID field_category = env->GetFieldID(cl, "category", "I");
1294     jfieldID field_attributes = env->GetFieldID(cl, "attributes", "J");
1295     jfieldID field_defenitionFlags = env->GetFieldID(cl, "defenitionFlags", "I");
1296     jfieldID field_ftidType = env->GetFieldID(cl, "ftidType", "Ljava/lang/String;");
1297 
1298     jobjectArray result;
1299         KNOWNFOLDERID* pFoldersIds = NULL;
1300         UINT count = 0;
1301         if(SUCCEEDED(pkfm->GetFolderIds(&pFoldersIds, &count))) {
1302             result = env->NewObjectArray(count, cl, NULL);
1303         jmethodID initMethod = env->GetMethodID(cl, "<init>", "()V");
1304         for(UINT i = 0; i < count; ++i)
1305         {
1306                 jobject fld = env->NewObject(cl, initMethod);
1307                 env->SetObjectArrayElement(result, i, fld);
1308 
1309             const KNOWNFOLDERID& folderId = pFoldersIds[i];
1310             LPOLESTR guid = NULL;
1311             if(SUCCEEDED(StringFromCLSID(folderId, &guid))) {
1312                 env->SetObjectField(fld, field_guid, JNU_NewStringPlatform(env, guid));
1313                 CoTaskMemFree(guid);
1314             }
1315 
1316             IKnownFolder* pFolder = NULL;
1317             if(SUCCEEDED(pkfm->GetFolder(folderId, &pFolder))) {
1318                 KNOWNFOLDER_DEFINITION kfDef;
1319                 if(SUCCEEDED(pFolder->GetFolderDefinition(&kfDef)))
1320                 {
1321                     env->SetObjectField(fld, field_name,
1322                                JNU_NewStringPlatform(env, kfDef.pszName));
1323                     if(kfDef.pszDescription)
1324                         env->SetObjectField(fld, field_description,
1325                                JNU_NewStringPlatform(env, kfDef.pszDescription));
1326                     if(SUCCEEDED(StringFromCLSID(kfDef.fidParent, &guid))) {
1327                         env->SetObjectField(fld, field_parent,
1328                                     JNU_NewStringPlatform(env, guid));
1329                         CoTaskMemFree(guid);
1330                     }
1331                     if(kfDef.pszRelativePath)
1332                         env->SetObjectField(fld, field_relativePath,
1333                                     JNU_NewStringPlatform(env, kfDef.pszRelativePath));
1334                     if(kfDef.pszParsingName)
1335                         env->SetObjectField(fld, field_parsingName,
1336                                     JNU_NewStringPlatform(env, kfDef.pszParsingName));
1337                     if(kfDef.pszTooltip)
1338                         env->SetObjectField(fld, field_tooltip,
1339                                     JNU_NewStringPlatform(env, kfDef.pszTooltip));
1340                     if(kfDef.pszLocalizedName)
1341                         env->SetObjectField(fld, field_localizedName,
1342                                     JNU_NewStringPlatform(env, kfDef.pszLocalizedName));
1343                     if(kfDef.pszIcon)
1344                         env->SetObjectField(fld, field_icon,
1345                                     JNU_NewStringPlatform(env, kfDef.pszIcon));
1346                     if(kfDef.pszSecurity)
1347                         env->SetObjectField(fld, field_security,
1348                                     JNU_NewStringPlatform(env, kfDef.pszSecurity));
1349                     if(SUCCEEDED(StringFromCLSID(kfDef.ftidType, &guid))) {
1350                         env->SetObjectField(fld, field_ftidType,
1351                                     JNU_NewStringPlatform(env, guid));
1352                         CoTaskMemFree(guid);
1353                     }
1354                     env->SetIntField(fld, field_category, kfDef.category);
1355                     env->SetIntField(fld, field_defenitionFlags, kfDef.kfdFlags);
1356                     env->SetLongField(fld, field_attributes, kfDef.dwAttributes);
1357                     FreeKnownFolderDefinitionFields(&kfDef);
1358 
1359                     LPWSTR folderPath = NULL;
1360                     if(SUCCEEDED(pFolder->GetPath(KF_FLAG_NO_ALIAS, &folderPath))
1361                                 && folderPath) {
1362                         env->SetObjectField(fld, field_path,
1363                                JNU_NewStringPlatform(env, folderPath));
1364                         CoTaskMemFree(folderPath);
1365                     }
1366 
1367                     IShellLibrary *plib = NULL;
1368                     hr = CoCreateInstance(CLSID_ShellLibrary, NULL,
1369                                      CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&plib));
1370                     if(SUCCEEDED(hr)) {
1371                         hr = plib->LoadLibraryFromKnownFolder(folderId, STGM_READWRITE);
1372                         if(SUCCEEDED(hr)) {
1373                             IShellItem *item = NULL;
1374                             hr = plib->GetDefaultSaveFolder(DSFT_DETECT,
1375                                     IID_PPV_ARGS(&item));
1376                             if(SUCCEEDED(hr) && item) {
1377                                 LPWSTR loc = NULL;
1378                                 hr = item->GetDisplayName(SIGDN_FILESYSPATH, &loc);
1379                                 if(SUCCEEDED(hr) && loc)
1380                                 {
1381                                     env->SetObjectField(fld, field_saveLocation,
1382                                             JNU_NewStringPlatform(env, loc));
1383                                     CoTaskMemFree(loc);
1384                                 }
1385                                 item->Release();
1386                             }
1387                         }
1388                         plib->Release();
1389                     }
1390                 }
1391             }
1392             pFolder->Release();
1393         }
1394         CoTaskMemFree(pFoldersIds);
1395         }
1396     pkfm->Release();
1397     return result;
1398 }
1399 
1400 } // extern "C"
< prev index next >