| /******************************************************************************* |
| * Copyright (c) 2006, 2008 Oracle. 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: |
| * Oracle - initial API and implementation |
| ******************************************************************************/ |
| package org.eclipse.jpt.core; |
| |
| import java.util.Iterator; |
| import java.util.List; |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.IResourceDelta; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.jdt.core.ElementChangedEvent; |
| import org.eclipse.jdt.core.IJavaProject; |
| import org.eclipse.jpt.core.context.JpaRootContextNode; |
| import org.eclipse.jpt.core.resource.java.JavaResourcePersistentType; |
| import org.eclipse.jpt.db.ConnectionProfile; |
| import org.eclipse.jpt.db.Schema; |
| import org.eclipse.jpt.utility.CommandExecutor; |
| import org.eclipse.jpt.utility.CommandExecutorProvider; |
| import org.eclipse.wst.validation.internal.provisional.core.IMessage; |
| |
| /** |
| * |
| * |
| * Provisional API: This interface is part of an interim API that is still |
| * under development and expected to change significantly before reaching |
| * stability. It is available at this early stage to solicit feedback from |
| * pioneering adopters on the understanding that any code that uses this API |
| * will almost certainly be broken (repeatedly) as the API evolves. |
| */ |
| public interface JpaProject extends JpaNode { |
| |
| /** |
| * Return the JPA project's name, which is the Eclipse project's name. |
| */ |
| String getName(); |
| |
| /** |
| * Return the Eclipse project associated with the JPA project. |
| */ |
| IProject getProject(); |
| |
| /** |
| * Return the Java project associated with the JPA project. |
| */ |
| IJavaProject getJavaProject(); |
| |
| /** |
| * Return the vendor-specific JPA platform that builds the JPA project |
| * and its contents. |
| */ |
| JpaPlatform getJpaPlatform(); |
| |
| /** |
| * Return the project's connection |
| */ |
| ConnectionProfile getConnectionProfile(); |
| |
| /** |
| * Return the primary schema associated with this project, which unless overridden, |
| * is the default schema from the connection |
| * @see JpaProject#getUserOverrideDefaultSchema() |
| * @return The default schema. May be null if the connection is not connected. |
| */ |
| Schema getDefaultSchema(); |
| |
| /** |
| * Return the user specified schema to be used as a default for this project. |
| * @see JpaProject#getUserOverrideDefaultSchemaName() |
| * @return The user specified default schema. May be null if the connection |
| * is not connected or if the user has not overridden the schema (implies |
| * the default schema associated with the connection profile should be used). |
| */ |
| Schema getUserOverrideDefaultSchema(); |
| |
| /** |
| * Return the data source the JPA project is mapped to. |
| */ |
| JpaDataSource getDataSource(); |
| |
| |
| // **************** user override default schema name ********************** |
| |
| /** |
| * ID string used when userOverrideDefaultSchemaName property is changed. |
| * @see org.eclipse.jpt.utility.model.Model#addPropertyChangeListener(String, org.eclipse.jpt.utility.model.listener.PropertyChangeListener) |
| */ |
| String USER_OVERRIDE_DEFAULT_SCHEMA_NAME_PROPERTY = "userOverrideDefaultSchemaName"; |
| |
| /** |
| * Return the name of the schema to be used as a default for the project |
| * instead of the one that is defaultly associated with the connection profile. |
| * @return The schema name. May be null (implies that the connection profile |
| * default schema should be used). |
| */ |
| String getUserOverrideDefaultSchemaName(); |
| |
| /** |
| * Set the name of the schema to be used as a default for the project |
| * instead of the one that is defaultly associated with the connection profile. |
| * @parameter defaultSchemaName - The default schema name to use instead of |
| * the default schema of the connection profile. May be null (implies that |
| * the connection profile default schema should be used). |
| */ |
| void setUserOverrideDefaultSchemaName(String defaultSchemaName); |
| |
| |
| // **************** discover annotated classes ***************************** |
| |
| /** |
| * ID string used when discoversAnnotatedClasses property is changed. |
| * @see org.eclipse.jpt.utility.model.Model#addPropertyChangeListener(String, org.eclipse.jpt.utility.model.listener.PropertyChangeListener) |
| */ |
| String DISCOVERS_ANNOTATED_CLASSES_PROPERTY = "discoversAnnotatedClasses"; |
| |
| /** |
| * Return whether the JPA project will "discover" annotated classes |
| * automatically, as opposed to requiring the classes to be |
| * listed in persistence.xml. |
| */ |
| boolean discoversAnnotatedClasses(); |
| |
| /** |
| * Set whether the JPA project will "discover" annotated classes |
| * automatically, as opposed to requiring the classes to be |
| * listed in persistence.xml. |
| */ |
| void setDiscoversAnnotatedClasses(boolean discoversAnnotatedClasses); |
| |
| |
| // **************** jpa files ********************************************** |
| |
| /** |
| * ID string used when jpaFiles collection is changed. |
| * @see org.eclipse.jpt.utility.model.Model#addCollectionChangeListener(String, org.eclipse.jpt.utility.model.listener.CollectionChangeListener) |
| */ |
| String JPA_FILES_COLLECTION = "jpaFiles"; |
| |
| /** |
| * Return the JPA project's JPA files. |
| */ |
| Iterator<JpaFile> jpaFiles(); |
| |
| /** |
| * Return the size of the JPA project's JPA files. |
| */ |
| int jpaFilesSize(); |
| |
| /** |
| * Return the JPA file corresponding to the specified file. |
| * Return null if unable to associate the given file |
| * with a JPA file. |
| */ |
| JpaFile getJpaFile(IFile file); |
| |
| /** |
| * Return the JPA project's JPA files for the specified content type ID. |
| * The content type ID should match that given in the |
| * JPA file content provider. |
| */ |
| Iterator<JpaFile> jpaFiles(String contentTypeId); |
| |
| |
| // **************** various queries **************************************** |
| |
| /** |
| * Return the JPA project's root "deploy path". |
| * JPA projects associated with Web projects return "WEB-INF/classes"; |
| * all others simply return an empty string. |
| */ |
| String getRootDeployLocation(); |
| |
| /** |
| * Return the {@link JpaRootContextNode} representing the JPA content of this project |
| */ |
| JpaRootContextNode getRootContext(); |
| |
| /** |
| * Return the names of the JPA project's annotated classes. |
| */ |
| Iterator<String> annotatedClassNames(); |
| |
| /** |
| * Return the Java persistent type resource for the specified fully qualified type name; |
| * null, if none exists. |
| */ |
| // TODO rename getJavaResourcePersistentType(String) |
| JavaResourcePersistentType getJavaPersistentTypeResource(String typeName); |
| |
| |
| // **************** jpa model synchronization and lifecycle **************** |
| |
| /** |
| * Synchronize the JPA project's JPA files with the specified resource |
| * delta, watching for added and removed files. |
| */ |
| void synchronizeJpaFiles(IResourceDelta delta) throws CoreException; |
| |
| /** |
| * Forward the Java element change event to the JPA project's JPA files. |
| */ |
| void javaElementChanged(ElementChangedEvent event); |
| |
| /** |
| * The JPA project has been removed from the JPA model. Clean up any |
| * hooks to external resources etc. |
| */ |
| void dispose(); |
| |
| |
| // **************** validation ********************************************* |
| |
| /** |
| * Return project's validation messages. |
| */ |
| Iterator<IMessage> validationMessages(); |
| |
| /** |
| * Add to the list of current validation messages |
| */ |
| void addToMessages(List<IMessage> messages); |
| |
| |
| // **************** support for modifying shared documents ***************** |
| |
| /** |
| * Set a thread-specific implementation of the CommandExecutor |
| * interface that will be used to execute a command to modify a shared |
| * document. If necessary, the command executor can be cleared by |
| * setting it to null. |
| * This allows background clients to modify documents that are |
| * already present in the UI. See implementations of CommandExecutor. |
| */ |
| void setThreadLocalModifySharedDocumentCommandExecutor(CommandExecutor commandExecutor); |
| |
| /** |
| * Return the project-wide implementation of the CommandExecutorProvider |
| * interface. |
| */ |
| CommandExecutorProvider getModifySharedDocumentCommandExecutorProvider(); |
| |
| |
| // **************** project "update" *************************************** |
| |
| /** |
| * Return the implementation of the Updater |
| * interface that will be used to "update" a JPA project. |
| */ |
| Updater getUpdater(); |
| |
| /** |
| * Set the implementation of the Updater |
| * interface that will be used to "update" a JPA project. |
| * Before setting the updater, Clients should save the current updater so |
| * it can be restored later. |
| */ |
| void setUpdater(Updater updater); |
| |
| /** |
| * Something in the JPA project has changed, "update" those parts of the |
| * JPA project that are dependent on other parts of the JPA project. |
| * This is called when |
| * - The JPA project updater is changed {@link JpaProject#setUpdater(Updater)} |
| * - anything in the JPA project changes |
| * - the JPA project's database connection is changed, opened, or closed |
| */ |
| void update(); |
| |
| /** |
| * This is the callback used by the updater to perform the actual |
| * "update". |
| */ |
| IStatus update(IProgressMonitor monitor); |
| |
| |
| /** |
| * Define a strategy that can be used to "update" a JPA project whenever |
| * something changes. |
| */ |
| interface Updater { |
| |
| /** |
| * The updater has just been assigned to its JPA project. |
| */ |
| void start(); |
| |
| /** |
| * Update the JPA project. |
| */ |
| void update(); |
| |
| /** |
| * The JPA project is disposed; dispose the updater. |
| */ |
| void dispose(); |
| |
| /** |
| * This updater does nothing. Useful for testing. |
| */ |
| final class Null implements Updater { |
| private static final Updater INSTANCE = new Null(); |
| public static Updater instance() { |
| return INSTANCE; |
| } |
| // ensure single instance |
| private Null() { |
| super(); |
| } |
| public void start() { |
| // do nothing |
| } |
| public void update() { |
| // do nothing |
| } |
| public void dispose() { |
| // do nothing |
| } |
| @Override |
| public String toString() { |
| return "IJpaProject.Updater.Null"; |
| } |
| } |
| |
| } |
| |
| |
| // **************** config that can be used to construct a JPA project ***** |
| |
| /** |
| * The settings used to construct a JPA project. |
| */ |
| interface Config { |
| |
| /** |
| * Return the Eclipse project to be associated with the new JPA project. |
| */ |
| IProject getProject(); |
| |
| /** |
| * Return the JPA platform to be associated with the new JPA project. |
| */ |
| JpaPlatform getJpaPlatform(); |
| |
| /** |
| * Return the name of the connection profile to be associated |
| * with the new JPA project. (This connection profile wraps a DTP |
| * connection profile.) |
| */ |
| String getConnectionProfileName(); |
| |
| /** |
| * Return the name of the schema to use instead of the default schema |
| * of the connection profile. |
| * May be null. |
| */ |
| String getUserOverrideDefaultSchemaName(); |
| |
| /** |
| * Return whether the new JPA project is to "discover" annotated |
| * classes. |
| */ |
| boolean discoverAnnotatedClasses(); |
| |
| } |
| |
| } |