/** * Method cacheValidateState. * * @param result */ private void cacheValidateState(IStatus aStatus, List readOnlyResources, List roNonResourceFiles) { if (aStatus.isOK()) { if (readOnlyResources != null && !readOnlyResources.isEmpty()) { ReferencedResource res = null; for (int i = 0; i < readOnlyResources.size(); i++) { res = (ReferencedResource) readOnlyResources.get(i); WorkbenchResourceHelper.setSynhronizationStamp(res, computeModificationStamp(res)); } } provider.cacheNonResourceValidateState(roNonResourceFiles); } }
/** * Method getNonResourceInconsistentFiles. * * @return List */ private List getNonResourceInconsistentFiles() { List files = provider.getNonResourceInconsistentFiles(); if (files != null && !files.isEmpty()) return files; //Determine consistency based on the synchronization of the IFile files = provider.getNonResourceFiles(); if (files == null || files.isEmpty()) return Collections.EMPTY_LIST; List inconsistent = null; int size = files.size(); IFile file = null; for (int i = 0; i < size; i++) { file = (IFile) files.get(i); if (file.isAccessible() && !file.isSynchronized(IResource.DEPTH_ZERO)) { if (inconsistent == null) inconsistent = new ArrayList(); inconsistent.add(file); } } if (inconsistent == null) inconsistent = Collections.EMPTY_LIST; return inconsistent; }
/** * Method checkReadOnlyResources. * * @return boolean */ private boolean checkReadOnlyResources() { List resources = provider.getResources(); if (resources == null || resources.isEmpty()) return false; int size = resources.size(); Resource res = null; IFile file = null; for (int i = 0; i < size; i++) { res = (Resource) resources.get(i); file = WorkbenchResourceHelper.getFile(res); if (file != null && file.isReadOnly()) return true; } return false; }
/** * This method should be called at least the first time a ResourceStateValidatorPresenter * becomes active and is about to edit its contents. The returned IStatus may have an ERROR * status which should be presented to the user. */ public IStatus validateState(ResourceStateValidatorPresenter presenter) throws CoreException { List roResources, nonResROFiles, roFiles = null; List[] readOnly = selectReadOnlyResources(provider.getResources()); roResources = readOnly[0]; roFiles = readOnly[1]; nonResROFiles = selectReadOnlyFiles(provider.getNonResourceFiles()); if (nonResROFiles != null) { if (roFiles == null) roFiles = nonResROFiles; else roFiles.addAll(nonResROFiles); } if (roFiles == null || roFiles.isEmpty()) return OK_STATUS; IFile[] files = new IFile[roFiles.size()]; roFiles.toArray(files); Object ctx = presenter != null ? presenter.getValidateEditContext() : null; IStatus result = ResourcesPlugin.getWorkspace().validateEdit(files, ctx); cacheValidateState(result, roResources, nonResROFiles); if (!result.isOK()) checkConsistency(presenter); return result; }
/** * Method checkReadOnlyNonResourceFiles. * * @return boolean */ private boolean checkReadOnlyNonResourceFiles() { List files = provider.getNonResourceFiles(); if (files == null || files.isEmpty()) return false; int size = files.size(); IFile file = null; for (int i = 0; i < size; i++) { file = (IFile) files.get(i); if (file.isReadOnly()) return true; } return false; }
public boolean checkSave(ResourceStateValidatorPresenter presenter) throws CoreException { if (presenter == null) return false; if (!provider.isDirty()) return false; List inconsistentResources = getInconsistentResources(); List inconsistentFiles = getFiles(inconsistentResources); inconsistentFiles = addOtherInconsistentFiles(inconsistentFiles); if (inconsistentFiles == null || inconsistentFiles.isEmpty()) return true; return presenter.promptForInconsistentFileOverwrite(inconsistentFiles); }
protected List getInconsistentResources() { List mofResources = provider.getResources(); List inconsistent = null; int size = mofResources.size(); Resource res = null; ReferencedResource refRes = null; for (int i = 0; i < size; i++) { res = (Resource) mofResources.get(i); if (WorkbenchResourceHelper.isReferencedResource(res)) { refRes = (ReferencedResource) res; if (!WorkbenchResourceHelper.isConsistent(refRes) && (refRes.isLoaded() && !refRes.isNew())) { if (inconsistent == null) inconsistent = new ArrayList(); inconsistent.add(refRes); } } } if (inconsistent == null) inconsistent = Collections.EMPTY_LIST; return inconsistent; }