/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.core.workspace; import org.eclipse.core.runtime.IProgressMonitor; /** * Common protocol for Model workspace items that must be opened before they can be * navigated or modified. Opening a model resource involves opening an EMF resource. * <p> * To open an item, all openable parent elements must be open. * The Model workspace model automatically opens parent items, as it automatically opens elements. * Opening an element may provide access to direct children and other descendants, * but does not automatically open any descendents which are themselves <code>Openable</code>. * </p> * <p> * This interface is not intended to be implemented by clients. * </p> * * @since 8.0 */ public interface Openable { /** * Closes this element and its buffer (if any). * Closing an element which is not open has no effect. * * <p>Note: although <code>close</code> is exposed in the API, clients are * not expected to open and close elements - the Java model does this automatically * as elements are accessed. * * @exception ModelWorkspaceException if an error occurs closing this element */ void close() throws ModelWorkspaceException; /** * Returns <code>true</code> if this element is open and: * <ul> * <li>its buffer has unsaved changes, or * <li>one of its descendants has unsaved changes, or * <li>a working copy has been created on one of this * element's children and has not yet destroyed * </ul> * * @exception ModelWorkspaceException if this element does not exist or if an * exception occurs while accessing its corresponding resource. * @return <code>true</code> if this element is open and: * <ul> * <li>its buffer has unsaved changes, or * <li>one of its descendants has unsaved changes, or * <li>a working copy has been created on one of this * element's children and has not yet destroyed * </ul> */ boolean hasUnsavedChanges() throws ModelWorkspaceException; /** * Returns whether this openable is open. This is a handle-only method. * @return true if this openable is open, false otherwise */ boolean isOpen(); /** * Opens this element and all parent elements that are not already open. * For compilation units, a buffer is opened on the contents of the underlying resource. * * <p>Note: although <code>open</code> is exposed in the API, clients are * not expected to open and close elements - the Java model does this automatically * as elements are accessed. * * @param progress the given progress monitor * @exception ModelWorkspaceException if an error occurs accessing the contents * of its underlying resource. Reasons include: * <ul> * <li>This Model workspace item does not exist (ELEMENT_DOES_NOT_EXIST)</li> * </ul> */ public void open(IProgressMonitor progress) throws ModelWorkspaceException; /** * Saves any changes in this element's buffer to its underlying resource * via a workspace resource operation. This has no effect if the element has no underlying * buffer, or if there are no unsaved changed in the buffer. * <p> * As a result of this operation, the element is consistent with its underlying * resource or buffer. * </p> * <p> * The FORCE update flag controls how this method deals with cases where the * workspace is not completely in sync with the local file system. If FORCE is <code>false</code> * the method will only attempt to overwrite a corresponding file in the local file * system provided it is in sync with the workspace. This option ensures there is no * unintended data loss; it is the recommended setting. However, if FORCE is passed as <code>true</code>, * an attempt will be made to write a corresponding file in the local file system, * overwriting any existing one if need be. In either case, if this method succeeds, the * resource will be marked as being local (even if it wasn't before). * </p> * * @param progress the given progress monitor * @param force controls how this method deals with cases where the * workspace is not completely in sync with the local file system * @exception ModelWorkspaceException if an error occurs accessing the contents * of its underlying resource. Reasons include: * <ul> * <li>This Model workspace item does not exist (ELEMENT_DOES_NOT_EXIST)</li> * <li>This Model workspace item is read-only (READ_ONLY)</li> * </ul> */ void save(IProgressMonitor progress, boolean force) throws ModelWorkspaceException; }