private void checkAttributues(VsphereConnHandler connHandler) throws IOException, FileFaultFaultMsg, GuestOperationsFaultFaultMsg, InvalidStateFaultMsg, RuntimeFaultFaultMsg, TaskInProgressFaultMsg, InvalidPropertyFaultMsg { ManagedObjectReference fileManager = getFileManager(connHandler); GuestListFileInfo res = null; try { res = connHandler .getClient() .getVimPort() .listFilesInGuest(fileManager, vm, credentials, getPathInVm(), null, null, null); } catch (SOAPFaultException e) { if (isFileNotFound(e)) { return; } throw e; } if (res.getFiles().size() == 1) { // only one result - it's a file GuestFileInfo guestFileInfo = res.getFiles().get(0); updateAttributes(guestFileInfo); } else { // more than one result - it's a directory. // find the entry for "." for (GuestFileInfo f : res.getFiles()) { if (f.getPath().equals(".")) { updateAttributes(f); break; } } } }
@Override public AbstractFile[] ls() throws IOException, UnsupportedFileOperationException { List<GuestFileInfo> fileInfos = new ArrayList<GuestFileInfo>(); int index = 0; VsphereConnHandler connHandler = null; try { connHandler = getConnHandler(); ManagedObjectReference fileManager = getFileManager(connHandler); boolean haveRemaining; do { GuestListFileInfo res = connHandler .getClient() .getVimPort() .listFilesInGuest(fileManager, vm, credentials, getPathInVm(), index, null, null); haveRemaining = (res.getRemaining() != 0); fileInfos.addAll(res.getFiles()); index = fileInfos.size(); } while (haveRemaining); String parentPath = PathUtils.removeTrailingSeparator(fileURL.getPath()) + SEPARATOR; Collection<AbstractFile> res = new ArrayList<AbstractFile>(); for (GuestFileInfo f : fileInfos) { final String name = getFileName(f.getPath()); if (name.equals(".") || name.equals("..")) { continue; } FileURL childURL = (FileURL) fileURL.clone(); childURL.setPath(parentPath + name); AbstractFile newFile = new VSphereFile(childURL, this, f); res.add(newFile); } return res.toArray(new AbstractFile[0]); } catch (FileFaultFaultMsg e) { translateandLogException(e); } catch (GuestOperationsFaultFaultMsg e) { translateandLogException(e); } catch (InvalidStateFaultMsg e) { translateandLogException(e); } catch (RuntimeFaultFaultMsg e) { translateandLogException(e); } catch (TaskInProgressFaultMsg e) { translateandLogException(e); } catch (InvalidPropertyFaultMsg e) { translateandLogException(e); } catch (URISyntaxException e) { translateandLogException(e); } finally { releaseConnHandler(connHandler); } // we never get here.. return null; }
void updateAttributes(GuestFileInfo guestFileInfo) { if (guestFileInfo.getType().equals(GuestFileType.FILE.value())) { isFile = true; size = guestFileInfo.getSize(); } else if (guestFileInfo.getType().equals(GuestFileType.SYMLINK.value())) { isSymLink = true; } else if (guestFileInfo.getType().equals(GuestFileType.DIRECTORY.value())) { isDir = true; } date = guestFileInfo.getAttributes().getModificationTime().toGregorianCalendar().getTimeInMillis(); }