Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'core/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/provisional/IStructuredModel.java')
-rw-r--r--core/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/provisional/IStructuredModel.java419
1 files changed, 419 insertions, 0 deletions
diff --git a/core/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/provisional/IStructuredModel.java b/core/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/provisional/IStructuredModel.java
new file mode 100644
index 0000000000..86690199d5
--- /dev/null
+++ b/core/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/provisional/IStructuredModel.java
@@ -0,0 +1,419 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ * Jens Lukowski/Innoopract - initial renaming/restructuring
+ *
+ *******************************************************************************/
+package org.eclipse.wst.sse.core.internal.provisional;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.wst.sse.core.internal.encoding.EncodingRule;
+import org.eclipse.wst.sse.core.internal.ltk.modelhandler.IModelHandler;
+import org.eclipse.wst.sse.core.internal.model.FactoryRegistry;
+import org.eclipse.wst.sse.core.internal.provisional.exceptions.ResourceAlreadyExists;
+import org.eclipse.wst.sse.core.internal.provisional.exceptions.ResourceInUse;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
+import org.eclipse.wst.sse.core.internal.undo.IStructuredTextUndoManager;
+import org.eclipse.wst.sse.core.internal.util.URIResolver;
+
+
+/**
+ * IStructuredModels are mainly interesting by their extensions and
+ * implementers. The main purposed of this abstraction is to provide a common
+ * means to manage models that have an associated structured document.
+ *
+ * <p>
+ * TODO: this interface needs ton of cleanup!
+ * </p>
+ *
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface IStructuredModel extends IAdaptable {
+
+
+ /**
+ * This API allows clients to declare that they are about to make a
+ * "large" change to the model. This change might be in terms of content
+ * or it might be in terms of the model id or base location.
+ *
+ * Note that in the case of embedded calls, notification to listeners is
+ * sent only once.
+ *
+ * Note that the client who is making these changes has the responsibility
+ * to restore the model's state once finished with the changes. See
+ * getMemento and restoreState.
+ *
+ * The method isModelStateChanging can be used by a client to determine if
+ * the model is already in a change sequence.
+ *
+ * This method is a matched pair to changedModel, and must be called
+ * before changedModel. A client should never call changedModel without
+ * calling aboutToChangeModel first nor call aboutToChangeModel without
+ * calling changedModel later from the same Thread.
+ */
+ void aboutToChangeModel();
+
+ void addModelLifecycleListener(IModelLifecycleListener listener);
+
+ void addModelStateListener(IModelStateListener listener);
+
+ /**
+ * Begin recording undo transactions.
+ */
+ void beginRecording(Object requester);
+
+ /**
+ * Begin recording undo transactions.
+ */
+ void beginRecording(Object requester, int cursorPosition, int selectionLength);
+
+ /**
+ * Begin recording undo transactions.
+ */
+ void beginRecording(Object requester, String label);
+
+ /**
+ * Begin recording undo transactions.
+ */
+ void beginRecording(Object requester, String label, int cursorPosition, int selectionLength);
+
+ /**
+ * Begin recording undo transactions.
+ */
+ void beginRecording(Object requester, String label, String description);
+
+ /**
+ * Begin recording undo transactions.
+ */
+ void beginRecording(Object requester, String label, String description, int cursorPosition, int selectionLength);
+
+ /**
+ * This API allows a client controlled way of notifying all ModelEvent
+ * listeners that the model has been changed. This method is a matched
+ * pair to aboutToChangeModel, and must be called after aboutToChangeModel
+ * ... or some listeners could be left waiting indefinitely for the
+ * changed event. So, its suggested that changedModel always be in a
+ * finally clause. Likewise, a client should never call changedModel
+ * without calling aboutToChangeModel first.
+ *
+ * In the case of embedded calls, the notification is just sent once.
+ *
+ */
+ void changedModel();
+
+ long computeModificationStamp(IResource resource);
+
+ /**
+ * @deprecated
+ * @see IModelManager#copyModelForEdit(String, String)
+ */
+ IStructuredModel copy(String id) throws ResourceInUse, ResourceAlreadyExists;
+
+ /**
+ * Disable undo management.
+ *
+ * @deprecated - the ability to enable and disable Undo management for the
+ * model cannot be guaranteed as it implicitly requires
+ * knowledge of the underlying undo/redo implementation
+ */
+ void disableUndoManagement();
+
+ /**
+ * Enable undo management.
+ *
+ * @deprecated - the ability to enable and disable Undo management for the
+ * model cannot be guaranteed as it implicitly requires
+ * knowledge of the underlying undo/redo implementation
+ */
+ void enableUndoManagement();
+
+ /**
+ * End recording undo transactions.
+ */
+ void endRecording(Object requester);
+
+ /**
+ * End recording undo transactions.
+ */
+ void endRecording(Object requester, int cursorPosition, int selectionLength);
+
+ /**
+ * This is a client-defined value for what that client (and/or loader)
+ * considers the "base" of the structured model. Frequently the location
+ * is either a workspace root-relative path of a workspace resource or an
+ * absolute location in the local file system.
+ *
+ * @return the base location of the model or <code>null</code> when one
+ * has not been set, such as in models resulting from calling
+ * {@link IModelManager#createNewInstance(IStructuredModel)}
+ */
+ String getBaseLocation();
+
+ /**
+ * @return The associated content type identifier (String) for this model.
+ * This value may be more accurate than the content type against
+ * which the model handler was registered.
+ *
+ * @see IModelHandler#getAssociatedContentTypeId()
+ */
+ String getContentTypeIdentifier();
+
+ /**
+ *
+ * @return The model's FactoryRegistry. A model is not valid without one.
+ */
+ FactoryRegistry getFactoryRegistry();
+
+ /**
+ * The id is the id that the model manager uses to identify this model
+ */
+ String getId();
+
+ /**
+ * @param offset
+ * a text offset within the structured document
+ * @return an IndexedRegion containing this offset or null if one could
+ * not be found
+ */
+ IndexedRegion getIndexedRegion(int offset);
+
+ /**
+ * @return the model's handler
+ */
+ IModelHandler getModelHandler();
+
+ IModelManager getModelManager();
+
+ /**
+ * @param id
+ * Object The id of the model TODO: try to refine the design
+ * not to use this function
+ *
+ * @return the reference count of underlying model
+ */
+ int getReferenceCount();
+
+ /**
+ * This function returns the edit-responsible reference count of
+ * underlying model.
+ *
+ * @param id
+ * Object The id of the model TODO: try to refine the design
+ * not to use this function
+ */
+ int getReferenceCountForEdit();
+
+ /**
+ * This function returns the reader reference count of underlying model.
+ *
+ * @param id
+ * Object The id of the model TODO: try to refine the design
+ * not to use this function
+ */
+ int getReferenceCountForRead();
+
+ Object getReinitializeStateData();
+
+ /**
+ * Get URI resolution helper
+ *
+ * @deprecated - use org.eclipse.wst.common.uriresolver.internal.provisional.URIResolverPlugin.createResolver(*) instead
+ */
+ URIResolver getResolver();
+
+ IStructuredDocument getStructuredDocument();
+
+ /**
+ * modification date of underlying resource, when this model was open, or
+ * last saved. (Note: for this version, the client must manage the
+ * accuracy of this data)
+ */
+ long getSynchronizationStamp();
+
+ /**
+ * Get undo manager.
+ */
+ IStructuredTextUndoManager getUndoManager();
+
+ /**
+ *
+ */
+ boolean isDirty();
+
+ /**
+ * This method can be called to determine if the model is within a
+ * "aboutToChange" and "changed" sequence.
+ */
+ public boolean isModelStateChanging();
+
+ /**
+ *
+ */
+ boolean isNew();
+
+ boolean isReinitializationNeeded();
+
+ /**
+ * This is a combination of if the model is dirty and if the model is
+ * shared for write access. The last writer as the responsibility to be
+ * sure the user is prompted to save.
+ */
+ public boolean isSaveNeeded();
+
+ /**
+ * This function returns true if either isSharedForRead or isSharedForEdit
+ * is true.
+ */
+ boolean isShared();
+
+ /**
+ * This function returns true if there are other references to the
+ * underlying model.
+ */
+ boolean isSharedForEdit();
+
+ /**
+ * This function returns true if there are other references to the
+ * underlying model.
+ */
+ boolean isSharedForRead();
+
+ /**
+ * newInstance is similar to clone, except that the newInstance contains
+ * no content. Its purpose is so clients can get a temporary, unmanaged,
+ * model of the same "type" as the original. Note: the client may still
+ * need to do some initialization of the model returned by newInstance,
+ * depending on desired use. For example, the only factories in the
+ * newInstance are those that would be normally be created for a model of
+ * the given contentType. Others are not copied automatically, and if
+ * desired, should be added by client.
+ */
+ IStructuredModel newInstance() throws IOException;
+
+ /**
+ * Performs a reinitialization procedure. For this model. Note for future:
+ * there may be a day where the model returned from this method is a
+ * different instance than the instance it was called on. This will occur
+ * when there is full support for "save as" type functions, where the
+ * model could theoretically change completely.
+ */
+ IStructuredModel reinit() throws IOException;
+
+ /**
+ * This function allows the model to free up any resources it might be
+ * using. In particular, itself, as stored in the IModelManager.
+ *
+ */
+ void releaseFromEdit();
+
+ /**
+ * This function allows the model to free up any resources it might be
+ * using. In particular, itself, as stored in the IModelManager.
+ *
+ */
+ void releaseFromRead();
+
+ /**
+ * This function replenishes the model with the resource without saving
+ * any possible changes. It is used when one editor may be closing, and
+ * specifically says not to save the model, but another "display" of the
+ * model still needs to hang on to some model, so needs a fresh copy.
+ *
+ * Only valid for use with managed models.
+ */
+ IStructuredModel reload(InputStream inputStream) throws IOException;
+
+ void removeModelLifecycleListener(IModelLifecycleListener listener);
+
+ void removeModelStateListener(IModelStateListener listener);
+
+ /**
+ * A method that modifies the model's synchronization stamp to match the
+ * resource. Turns out there's several ways of doing it, so this ensures a
+ * common algorithm.
+ */
+ void resetSynchronizationStamp(IResource resource);
+
+ void resourceDeleted();
+
+ void resourceMoved(IStructuredModel newModel);
+
+ void save() throws UnsupportedEncodingException, IOException, CoreException;
+
+ /**
+ * @deprecated - will save according to the encoding priorities specified for the IFile
+ */
+ void save(EncodingRule encodingRule) throws UnsupportedEncodingException, IOException, CoreException;
+
+ void save(IFile iFile) throws UnsupportedEncodingException, IOException, CoreException;
+
+ /**
+ * @deprecated - will save according to the encoding priorities specified for the IFile
+ */
+ void save(IFile iFile, EncodingRule encodingRule) throws UnsupportedEncodingException, IOException, CoreException;
+
+ void save(OutputStream outputStream) throws UnsupportedEncodingException, IOException, CoreException;
+
+ /**
+ * Sets the base location of this model to the new value, also updating
+ * the value in its URI resolution helper if one is present.
+ *
+ * @param newBaseLocation
+ */
+ void setBaseLocation(String newBaseLocation);
+
+ public void setDirtyState(boolean dirtyState);
+
+ void setFactoryRegistry(FactoryRegistry registry);
+
+ /**
+ * The id is the id that the model manager uses to identify this model
+ */
+ void setId(String id) throws ResourceInUse;
+
+ void setModelHandler(IModelHandler modelHandler);
+
+ void setModelManager(IModelManager modelManager);
+
+ public void setNewState(boolean newState);
+
+ /**
+ * Sets a "flag" that reinitialization is needed.
+ */
+ void setReinitializeNeeded(boolean b);
+
+ /**
+ * Holds any data that the reinitialization procedure might find useful in
+ * reinitializing the model. This is handy, since the reinitialization may
+ * not take place at once, and some "old" data may be needed to properly
+ * undo previous settings. Note: the parameter was intentionally made to
+ * be of type 'Object' so different models can use in different ways.
+ */
+ void setReinitializeStateData(Object object);
+
+ /**
+ * Set the URI resolution helper
+ */
+ void setResolver(URIResolver uriResolver);
+
+ void setStructuredDocument(IStructuredDocument structuredDocument);
+
+ /**
+ * Set undo manager.
+ */
+ void setUndoManager(IStructuredTextUndoManager undoManager);
+}

Back to the top