blob: c27dc9016eb27b9011c43cc14a82e7f78a8b02fa [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 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.internal.context;
import java.util.List;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jpt.core.JpaProject;
import org.eclipse.jpt.core.JptCorePlugin;
import org.eclipse.jpt.core.context.BaseJpaContent;
import org.eclipse.jpt.core.context.orm.EntityMappings;
import org.eclipse.jpt.core.context.orm.OrmPersistentType;
import org.eclipse.jpt.core.context.persistence.PersistenceUnit;
import org.eclipse.jpt.core.context.persistence.PersistenceXml;
import org.eclipse.jpt.core.internal.validation.DefaultJpaValidationMessages;
import org.eclipse.jpt.core.internal.validation.JpaValidationMessages;
import org.eclipse.jpt.core.resource.persistence.PersistenceArtifactEdit;
import org.eclipse.jpt.core.resource.persistence.PersistenceResource;
import org.eclipse.jpt.utility.internal.node.Node;
import org.eclipse.wst.common.internal.emfworkbench.WorkbenchResourceHelper;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
public class GenericJpaContent extends AbstractJpaContextNode
implements BaseJpaContent
{
protected PersistenceXml persistenceXml;
public GenericJpaContent(JpaProject jpaProject) {
super(jpaProject);
}
@Override
protected void initialize(Node parentNode) {
super.initialize(parentNode);
PersistenceArtifactEdit pae = PersistenceArtifactEdit.getArtifactEditForRead(jpaProject().project());
PersistenceResource pr = pae.getResource();
if (pr.exists()) {
this.persistenceXml = this.buildPersistenceXml(pr);
}
pae.dispose();
}
@Override
public EntityMappings entityMappings() {
return null;
}
@Override
public OrmPersistentType ormPersistentType() {
return null;
}
// **************** persistence xml ****************************************
public PersistenceXml getPersistenceXml() {
return this.persistenceXml;
}
protected void setPersistenceXml(PersistenceXml persistenceXml) {
PersistenceXml old = this.persistenceXml;
this.persistenceXml = persistenceXml;
this.firePropertyChanged(PERSISTENCE_XML_PROPERTY, old, persistenceXml);
}
public PersistenceXml addPersistenceXml() {
if (this.persistenceXml != null) {
throw new IllegalStateException();
}
PersistenceArtifactEdit pae = PersistenceArtifactEdit.getArtifactEditForWrite(this.jpaProject().project());
PersistenceResource pr = pae.createDefaultResource();
pae.dispose();
PersistenceXml px = this.buildPersistenceXml(pr);
this.setPersistenceXml(px);
return px;
}
public void removePersistenceXml() {
if (this.persistenceXml == null) {
throw new IllegalStateException();
}
PersistenceArtifactEdit pae = PersistenceArtifactEdit.getArtifactEditForWrite(jpaProject().project());
PersistenceResource pr = pae.getResource();
pae.dispose();
try {
WorkbenchResourceHelper.deleteResource(pr);
}
catch (CoreException ce) {
JptCorePlugin.log(ce);
}
if (! pr.exists()) {
this.setPersistenceXml(null);
}
}
// **************** updating ***********************************************
public void update(IProgressMonitor monitor) {
PersistenceArtifactEdit pae = PersistenceArtifactEdit.getArtifactEditForRead(jpaProject().project());
PersistenceResource pr = pae.getResource();
if (pr.exists()) {
if (this.persistenceXml != null) {
this.persistenceXml.update(pr);
}
else {
setPersistenceXml(this.buildPersistenceXml(pr));
}
}
else {
setPersistenceXml(null);
}
pae.dispose();
}
protected PersistenceXml buildPersistenceXml(PersistenceResource persistenceResource) {
return this.jpaFactory().buildPersistenceXml(this, persistenceResource);
}
// *************************************************************************
@Override
public PersistenceUnit persistenceUnit() {
throw new UnsupportedOperationException("No PersistenceUnit in this context");
}
//******** Validation *************************************************
/* If this is true, it may be assumed that all the requirements are valid
* for further validation. For example, if this is true at the point we
* are validating persistence units, it may be assumed that there is a
* single persistence.xml and that it has valid content down to the
* persistence unit level. */
private boolean okToContinueValidation = true;
public void addToMessages(List<IMessage> messages) {
addNoPersistenceXmlMessage(messages);
//TODO - multiple persistence unit message
addOrphanedJavaClassMessages(messages);
if(okToContinueValidation) {
getPersistenceXml().addToMessages(messages);
}
}
protected void addNoPersistenceXmlMessage(List<IMessage> messages) {
if (persistenceXml == null) {
messages.add(
DefaultJpaValidationMessages.buildMessage(
IMessage.HIGH_SEVERITY,
JpaValidationMessages.PROJECT_NO_PERSISTENCE_XML,
this)
);
okToContinueValidation = false;
}
}
protected void addOrphanedJavaClassMessages(List<IMessage> messages) {
// for (Iterator<JavaPersistentType> stream = jpaProject.javaPersistentTypes(); stream.hasNext(); ) {
// JavaPersistentType jpType = stream.next();
// if (jpType.getMappingKey() != IMappingKeys.NULL_TYPE_MAPPING_KEY && ! contains(jpType)) {
// messages.add(
// JpaValidationMessages.buildMessage(
// IMessage.HIGH_SEVERITY,
// IJpaValidationMessages.PERSISTENT_TYPE_UNSPECIFIED_CONTEXT,
// jpType.getMapping(), jpType.getMapping().validationTextRange())
// );
// }
// }
}
}