blob: 80cc1599ba9f666de7c95af3f0c6e06e86e15a4f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006 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.facet;
import java.io.IOException;
import java.util.Iterator;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jem.util.emf.workbench.WorkbenchResourceHelperBase;
import org.eclipse.jpt.core.internal.JptCorePlugin;
import org.eclipse.jpt.core.internal.JpaModelManager;
import org.eclipse.jpt.core.internal.content.orm.EntityMappingsInternal;
import org.eclipse.jpt.core.internal.content.orm.OrmFactory;
import org.eclipse.jpt.core.internal.content.orm.OrmXmlResource;
import org.eclipse.jpt.core.internal.content.persistence.MappingFileRef;
import org.eclipse.jpt.core.internal.content.persistence.Persistence;
import org.eclipse.jpt.core.internal.content.persistence.PersistenceFactory;
import org.eclipse.jpt.core.internal.content.persistence.PersistenceUnit;
import org.eclipse.jpt.core.internal.content.persistence.resource.PersistenceResource;
import org.eclipse.jpt.utility.internal.CollectionTools;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
import org.eclipse.wst.common.project.facet.core.IDelegate;
import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
public class JpaFacetPostInstallDelegate
implements IDelegate, IJpaFacetDataModelProperties
{
private final static String ORM_XML_FILE_PATH = "META-INF/orm.xml";
public void execute(IProject project, IProjectFacetVersion fv,
Object config, IProgressMonitor monitor) throws CoreException {
if (monitor != null) {
monitor.beginTask("", 2); //$NON-NLS-1$
}
JpaModelManager.instance().createJpaProject(project);
IDataModel dataModel = (IDataModel) config;
JpaFacetUtils.setPlatform(project, dataModel.getStringProperty(PLATFORM_ID));
JpaFacetUtils.setConnectionName(project, dataModel.getStringProperty(CONNECTION));
createPersistenceXml(project, dataModel);
if (dataModel.getBooleanProperty(CREATE_ORM_XML)) {
createOrmXml(project, dataModel);
}
if (monitor != null) {
monitor.worked(1);
}
JpaModelManager.instance().fillJpaProject(project);
if (monitor != null) {
monitor.worked(2);
}
}
private void createPersistenceXml(IProject project, IDataModel dataModel) {
String sourceFolder = computeSourceFolder(project);
URI fileURI = URI.createPlatformResourceURI(sourceFolder + "/META-INF/persistence.xml", false);
PersistenceResource resource = (PersistenceResource) getResourceSet(project).createResource(fileURI);
Persistence persistence = PersistenceFactory.eINSTANCE.createPersistence();
persistence.setVersion("1.0");
PersistenceUnit pUnit = PersistenceFactory.eINSTANCE.createPersistenceUnit();
pUnit.setName(project.getName());
if (dataModel.getBooleanProperty(CREATE_ORM_XML)) {
MappingFileRef mappingFile = PersistenceFactory.eINSTANCE.createMappingFileRef();
mappingFile.setFileName(ORM_XML_FILE_PATH);
pUnit.getMappingFiles().add(mappingFile);
}
persistence.getPersistenceUnits().add(pUnit);
try {
resource.getContents().add(persistence);
resource.save(null);
}
catch (IOException e) {
JptCorePlugin.log(e);
}
}
private void createOrmXml(IProject project, IDataModel dataModel) {
String sourceFolder = computeSourceFolder(project);
URI fileURI = URI.createPlatformResourceURI(sourceFolder + "/" + ORM_XML_FILE_PATH, false);
OrmXmlResource resource = (OrmXmlResource) getResourceSet(project).createResource(fileURI);
EntityMappingsInternal entityMappings = OrmFactory.eINSTANCE.createEntityMappingsInternal();
entityMappings.setVersion("1.0");
try {
resource.getContents().add(entityMappings);
resource.save(null);
}
catch (IOException e) {
JptCorePlugin.log(e);
}
}
private String computeSourceFolder(IProject project) {
IJavaProject jproject = JavaCore.create(project);
IClasspathEntry[] classpath;
try {
classpath = jproject.getRawClasspath();
}
catch (JavaModelException jme) {
classpath = new IClasspathEntry[0];
}
for (Iterator stream = CollectionTools.iterator(classpath); stream.hasNext(); ) {
IClasspathEntry next = (IClasspathEntry) stream.next();
if (next.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
return next.getPath().toString();
}
}
return "/" + project.getName();
}
private ResourceSet getResourceSet(IProject project) {
return WorkbenchResourceHelperBase.getResourceSet(project);
}
}