This commit was manufactured by cvs2svn to create branch 'JohnWork'.
Sprout from master 2001-08-27 18:21:31 UTC John Arthorne <johna> 'Various optimizations - see summary in 1GHFO1M'
Cherrypick from master 2001-08-13 19:10:40 UTC Rodrigo Perretti <rperetti> 'Fixed for 1GE981Z: ITPCORE:WIN2000 - Post_Build listeners can cause runaway stack':
bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/Messages.properties
Cherrypick from R1_0 2001-07-31 14:59:03 UTC DJ Houghton <dj> 'Fix for: 1GH30IA: ITPCORE:ALL - validateSave() extension point needed':
bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/IValidator.javadiff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/IValidator.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/IValidator.java
new file mode 100644
index 0000000..23f09b2
--- /dev/null
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/IValidator.java
@@ -0,0 +1,25 @@
+package org.eclipse.core.internal.resources;
+
+/*
+ * (c) Copyright IBM Corp. 2000, 2001.
+ * All Rights Reserved.
+ */
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IStatus;
+
+public interface IValidator {
+/**
+ * Validates that the given file can be saved. This method is called from
+ * <code>IFile#setContents</code> and <code>IFile#appendContents</code>
+ * before any attempt to write data to disk. The returned status is
+ * <code>IStatus.OK</code> if this validator believes the given file can be
+ * successfully saved. In all other cases the return value is a non-OK status.
+ * Note that a return value of <code>IStatus.OK</code> does not guarantee
+ * that the save will succeed.
+ *
+ * @return a status indicating whether or not it is reasonable to try writing to the given file.
+ * A return value with an <code>IStatus.OK<code> code indicates a save should be attempted.
+ */
+public IStatus validateSave(IFile file);
+}
diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/Messages.properties b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/Messages.properties
new file mode 100644
index 0000000..2de0e59
--- /dev/null
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/Messages.properties
@@ -0,0 +1,286 @@
+### Resources plugin messages.
+
+ok = OK.
+
+### dtree
+dtree.subclassImplement = Subclass should have implemented this.
+dtree.immutable = Illegal attempt to modify an immutable tree.
+dtree.notFound = Tree element {0} not found.
+dtree.missingChild = Missing child node: {0}.
+dtree.reverse = Tried to reverse a non-comparison tree.
+dtree.switchError = Swtich error in DeltaTreeReader.readNode().
+dtree.navigationError = Error navigating path in DeltaTreeWriter.writeTo().
+dtree.malformedTree = Malformed tree.
+dtree.notImmutable = Tree must be immutable.
+dtree.parentsNotImmutable = Parent trees must be immutable.
+
+
+### events
+events.unknown = {0} encountered while running {1}.
+events.instantiate.0 = Unable to instantiate builder.
+events.instantiate.1 = Error instantiating builder: {0}.
+events.invoking.1 = Invoking builder on {0}.
+events.invoking.2 = Invoking {0} on {1}.
+events.errors = Errors during build.
+events.building.0 = Building workspace.
+events.building.1 = Building: {0}.
+events.noProject = Cannot access builders for a non-existent project: {0}.
+events.notification = Notification problems occurred.
+
+
+### utils
+utils.failed = Assertion failed; {0}.
+utils.null = Null argument; {0}.
+utils.noElements = No more elements in EmptyEnumeration.
+utils.buildException = CoreStats got build exception without start build.
+utils.missing = PluginStats is missing for plugin: {0}.
+utils.endBuild = CoreStats got endBuild without startBuild.
+utils.endNotify = CoreStats got endNotify without startNotify.
+utils.snapshots = {0} snapshots took {1} ms.
+utils.stats = Stats for: {0}.
+utils.notifications = Notifications: {0} ({1} % of total).
+utils.notifyTime = Notification time (ms): {0} ({1} % of total).
+utils.builds = Builds: {0} ({1} % of total).
+utils.buildTime = Build time (ms): {0} ({1} % of total).
+utils.exceptions = Exceptions: {0} ({1} % of total).
+utils.wrongLength = String: {0} is incorrect length.
+utils.clone = Clone not supported.
+utils.address = Local host address cannot be found.
+utils.print = Failed to print UUID.
+
+### URL
+url.badVariant = Unsupported "platform:" protocol variation {0}.
+url.couldNotResolve = Project: {0} does not exist. Could not resolve URL: {1}.
+
+### watson
+watson.nullArg = Null argument to {0}.
+watson.noModify = Cannot modify implicit root node.
+watson.illegalSubtree = Illegal subtree passed to createSubtree().
+watson.elementNotFound = Element not found: {0}.
+watson.immutable = Attempt to modify an immutable tree.
+watson.traversal = Invalid traversal order.
+watson.unknown = Unknown format.
+
+
+### internal.resources
+resources.settingContents = Setting contents: {0}.
+resources.creating = Creating resource {0}.
+resources.folderOverFile = Cannot overwrite folder with file: {0}.
+resources.deleteMeta = Could not delete metadata for: {0}.
+resources.writeMeta = Could not write metadata for: {0}.
+resources.writeWorkspaceMeta = Could not write workspace metadata: {0}.
+resources.markerNotFound = Marker id: {0} not found.
+resources.changeInAdd = Trying to change a marker in an add method.
+resources.readMeta = Could not read metadata for: {0}.
+resources.format = Unknown format.
+resources.projectDesc = Problems encountered while setting project description.
+resources.mustBeOpen = Resource {0} is not open.
+resources.invalidProjDesc = Invalid project description.
+resources.closing.1 = Closing: {0}.
+resources.errorNature = Error configuring nature: {0}.
+resources.create = Create.
+resources.natureExtension = Missing project nature extension for {0}.
+resources.natureClass = Missing project nature class for {0}.
+resources.natureImplement = Project nature {0} does not implement IProjectNature.
+resources.natureDeconfig = Error deconfiguring nature: {0}.
+resources.deleting.0 = Deleting.
+resources.deleting = Deleting: {0}.
+resources.deleteProblem = Problems encountered while deleting resources.
+resources.copying.0 = Copying.
+resources.copying = Copying: {0}.
+resources.copyProblem = Problems encountered while copying resources.
+resources.syncTree = Synchronizing tree.
+resources.renaming = Renaming: {0}.
+resources.movingContent = Moving project content.
+resources.opening.1 = Opening: {0}.
+resources.setDesc = Setting project description.
+resources.touch = Touching resource: {0}.
+resources.copyNotMet = Copy requirements not met.
+resources.destNotNull = Destination path should not be null.
+resources.destNotSub = Destination should not be under resource's hierarchy.
+resources.fileToProj = Cannot copy a file to a project.
+resources.copyMet = Copy requirements met.
+resources.mustNotExist = Resource {0} already exists.
+resources.mustExist = Resource {0} does not exist.
+resources.mustBeLocal = Resource {0} is not local.
+resources.moveNotMet = Move requirements not met.
+resources.moveMet = Move requirements met.
+resources.moving.0 = Moving.
+resources.moving = Moving: {0}.
+resources.moveProblem = Problems encountered while moving resources.
+resources.different = Resources were different than expected.
+resources.refreshing = Refreshing: {0}.
+resources.setLocal = Setting resource local flag.
+resources.exSafeRead = Could not read safe table.
+resources.exSafeSave = Could not save safe table.
+resources.saveProblem = Problems occurred during save.
+resources.snapInit = Could not initialize snapshot file.
+resources.restoring = Restoring.
+resources.exMasterTable = Could not read master table.
+resources.ignored = Ignored.
+resources.snapRead = Could not read snapshot file.
+resources.exSaveMaster = Could not save master table.
+resources.resetMarkers = Could not reset markers snapshot file.
+resources.resetSync = Could not reset syncinfo snapshot file.
+resources.saving.0 = Saving workspace.
+resources.saveWarnings = Save operation warnings.
+resources.readSync = Errors reading syncinfo file: {0}.
+resources.cannotModify = The resource tree is locked for modifications.
+resources.updating = Updating.
+resources.closing.0 = Closing workspace.
+resources.workspaceClose = Problems encountered while closing workspace.
+resources.notChild = Resource {0} is not a child of {1}.
+resources.couldnotDelete = Could not delete: {0}.
+resources.shutdown = Workspace was not properly initialized or has already shutdown.
+resources.resourcePath = Path must include project and resource name.
+resources.workspaceOpen = The workspace is already open.
+resources.readWorkspaceMeta = Could not read workspace metadata.
+resources.workspaceClosed = Workspace is closed.
+resources.running = Running.
+resources.saveOp = Save cannot be called from inside an operation.
+resources.snapRequest = Snapshot requested.
+resources.shutdownProblems = Problem on shutdown.
+resources.nameNull = Name must not be null.
+resources.nameEmpty = Names cannot be empty.
+resources.invalidWhitespace = Names cannot begin or end with whitespace.
+resources.invalidDot = {0} must not end in a period (.).
+resources.invalidChar = {0} is an invalid character in a resource name.
+resources.pathNull = Paths must not be null.
+resources.invalidRoot = Root (/) is an invalid resource path.
+resources.mustBeAbsolute = Path must be absolute.
+resources.projectPath = Path for project must have only one segment.
+resources.invalidPath = {0} is an invalid resource path.
+resources.validLocation = Valid project location.
+resources.overlapLocal = {0} and {1} overlap.
+resources.readWorkspaceTree = Problems reading workspace tree.
+resources.readWorkspaceSnap = Problems reading workspace tree snapshot.
+resources.readProjectTree = Problems reading project tree.
+resources.writing = Writing.
+resources.shuttingDown = Shutting down.
+resources.reading = Reading.
+resources.readingSnap = Reading snapshot.
+resources.broadcasting = Broadcasting.
+resources.snapshoting = Snapshoting.
+resources.fileExists = A resource already exists on disk {0}.
+resources.existsDifferentCase = The file system is not case sensitive and a resource with similar name exists on disk: {0}.
+
+
+### indexing
+pageStore.genericFailure = Error occurred during a page store file operation.
+pageStore.createFailure = Error occurred creating page store file.
+pageStore.lengthFailure = Error occurred determing page store file length.
+pageStore.openFailure = Error occurred opening page store file.
+pageStore.readFailure = Error occurred reading page store file.
+pageStore.writeFailure = Error occurred writing page store file.
+pageStore.commitFailure = Error occurred during commit processing.
+pageStore.metadataRequestFailure = Error occurred during metadata request processing.
+pageStore.conversionFailure = Error occurred during conversion of the page store file.
+pageStore.integrityFailure = Error occurred that compromises the integrity of the page store file.
+pageStore.logOpenFailure = Error occurred opening transaction log file.
+pageStore.logReadFailure = Error occurred reading transaction log file.
+pageStore.logWriteFailure = Error occurred writing transaction log file.
+pageStore.logCreateFailure = Error occurred creating transaction log file.
+
+objectStore.genericFailure = Error occurred in object store operation.
+objectStore.internalFailure = Internal error occurred in object store operation.
+objectStore.objectSizeFailure = Object is too large for page.
+objectStore.pageVacancyFailure = Object table on page is full.
+objectStore.objectExistenceFailure = Object was not found.
+objectStore.objectHeaderFailure = Object header format is invalid.
+objectStore.storeCloseFailure = Error occurred during close of object store.
+objectStore.storeCreateFailure = Error creating object store.
+objectStore.pageReadFailure = Error reading page from object store.
+objectStore.storeOpenFailure = Error opening object store.
+objectStore.objectInsertFailure = Error occurred writing object into page.
+objectStore.pageWriteFailure = Cannot store page in page store.
+objectStore.objectRemoveFailure = Error occurred removing object from page.
+objectStore.objectUpdateFailure = Error updating object.
+objectStore.storeConversionFailure = Error converting object store.
+objectStore.metadataRequestFailure = Error getting or putting metadata.
+objectStore.objectTypeFailure = Type check failed.
+objectStore.objectIsLocked = Operation cannot be performed because the object is being used.
+
+indexedStore.genericError = An error occurred during an indexed store operation.
+indexedStore.entryKeyLengthError = Key length > 1024.
+indexedStore.entryNotRemoved = Cannot remove an index entry referenced by other cursors.
+indexedStore.entryValueLengthError = Value length > 2048.
+indexedStore.entryValueNotUpdated = Error occurred updating value in leaf node.
+indexedStore.indexNodeNotRetrieved = Error occurred getting index node.
+indexedStore.indexNodeNotStored = Error occurred storing index node.
+indexedStore.indexNodeNotSplit = Error occurred spliting an index node.
+indexedStore.indexNodeNotCreated = Index node not created.
+indexedStore.indexExists = Index already exists.
+indexedStore.indexNotCreated = Index was not created.
+indexedStore.indexNotFound = Index not found.
+indexedStore.indexNotRemoved = Error occurred removing index from the store.
+indexedStore.objectNotCreated = Error occurred creating a new object.
+indexedStore.objectExists = Object already exists.
+indexedStore.objectNotFound = Object not found.
+indexedStore.objectNotAcquired = Object has not been acquired for the intent needed for this operation.
+indexedStore.objectNotReleased = Cannot release an object that has not been acquired.
+indexedStore.objectNotRemoved = Error occurred removing an object from the store.
+indexedStore.objectTypeError = Unexpected object type found.
+indexedStore.objectNotUpdated = Error occurred updating an object.
+indexedStore.objectNotStored = Object was not stored.
+indexedStore.storeNotCreated = Store does not exist and cannot be created.
+indexedStore.storeEmpty = Could not find root context because store is empty.
+indexedStore.storeFormatError = Could not find root context because store has invalid format.
+indexedStore.storeNotOpen = Store has not been opened.
+indexedStore.storeNotReadWrite = Attempted to set a Modify intent for an object in a read-only store.
+indexedStore.storeNotOpened = Error occurred opening indexed store.
+indexedStore.storeNotClosed = Error closing indexed store.
+indexedStore.storeNotFlushed = Error flushing indexed store.
+indexedStore.contextNotAvailable = Error occurred accessing the indexed store context.
+indexedStore.objectIDInvalid = ObjectID format is invalid.
+indexedStore.entryRemoved = Element at this cursor has been removed.
+indexedStore.storeNotConverted = The indexed store opened is not the current version and no conversion routine exists.
+
+
+### localstore
+localstore.copyProblem = Problems encountered while copying resources.
+localstore.deleteProblem = Problems encountered while deleting resources.
+localstore.couldnotDelete = Could not delete: {0}.
+localstore.couldnotDeleteReadOnly = Could not delete read-only resource: {0}.
+localstore.couldnotMove = Could not move: {0}.
+localstore.moving = Moving: {0}.
+localstore.failedMove = Critical failure moving: {0} to: {1}. Content is lost.
+localstore.copying = Copying: {0}.
+localstore.deleting = Deleting: {0}.
+localstore.refreshing = Refreshing: {0}.
+localstore.fileNotFound = File not found: {0}.
+localstore.notAFile = Resource is not a file: {0}.
+localstore.couldNotRead = Could not read file: {0}.
+localstore.couldNotWrite = Could not write file: {0}.
+localstore.couldNotWriteReadOnly = Could not write to read-only file: {0}.
+localstore.couldNotCreateFolder = Could not create folder: {0}.
+localstore.resourceExists = Resource already exists on disk: {0}.
+localstore.resourceIsOutOfSync = Resource is out of sync with the file system: {0}.
+localstore.fileExists = A resource already exists on disk {0}.
+localstore.couldNotLoadLibrary = Could not load library: {0}.
+history.problemsAccessing = Problems accessing history store.
+history.couldNotAdd = Could not add history for {0}.
+history.problemsCleaning = Problems cleaning up history store.
+history.notValid = State is not valid or might have expired.
+history.problemsRemoving = Problems removing history for {0}.
+history.corrupt = The history store got corrupted. Local history is lost. A new store is being created.
+
+
+### properties
+properties.invalidPropName = Invalid property name: {0} {1}.
+properties.storeProblem = Problems accessing property store.
+properties.couldNotReadProp = Could not read property: {0} {1}.
+properties.couldNotWriteProp = Could not write property: {0} {1}.
+properties.couldNotDeleteProp = Could not delete property: {0} {1}.
+properties.storeNotAvaiable = Property store is not available for: {0}.
+indexed.couldNotOpen = Could not open indexed store: {0}.
+indexed.couldNotClose = Could not close indexed store: {0}.
+indexed.couldNotCreate = Could not create indexed store: {0}.
+indexed.couldNotCreateIndex = Could not create index for store: {0}.
+indexed.couldNotCreateCursor = Could not create indexed cursor: {0}.
+indexed.couldNotCommit = Indexed store transactions did not commit properly: {0}.
+indexed.couldNotRollback = Indexed store transactions did not rollback properly: {0}.
+indexed.couldNotGetIndex = Could not get index for store: {0}.
+indexed.storeProblem = Problems accessing indexed store {0}.
+indexed.couldNotWrite = Could not write to indexed store: {0}.
+indexed.couldNotRead = Could not read from indexed store: {0}.
+indexed.couldNotDelete = Could not delete from indexed store: {0}.