/** * Copyright (c) 2005-2007 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 - Initial API and implementation */ package org.eclipse.emf.importer.java; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.jdt.core.JavaCore; import org.eclipse.emf.codegen.ecore.genmodel.GenPackage; import org.eclipse.emf.common.util.Diagnostic; import org.eclipse.emf.common.util.Monitor; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.importer.ModelImporter; import org.eclipse.emf.importer.java.builder.JavaEcoreBuilder; /** * @since 2.1.0 */ public class JavaImporter extends ModelImporter { @Override public String getID() { return "org.eclipse.emf.importer.java"; } public boolean canImport() { IFile genModelFile = getGenModelFile(); if (genModelFile != null) { IProject project = genModelFile.getProject(); try { if (project.hasNature(JavaCore.NATURE_ID)) { return true; } else if (originalGenModel != null) { String modelDirectory = originalGenModel.getModelDirectory(); if (modelDirectory != null) { IFolder folder = ResourcesPlugin.getWorkspace().getRoot().getFolder(new Path(modelDirectory)); if (folder.exists() && folder.getProject().hasNature(JavaCore.NATURE_ID)) { return true; } } } } catch (CoreException e) { JavaImporterPlugin.INSTANCE.log(e); } } return false; } protected IFile getGenModelFile() { IPath path = getGenModelPath(); if (path != null) { return getWorkspaceRoot().getFile(path); } return null; } @Override public EPackage getReferredEPackage(GenPackage genPackage) { return genPackage.getEcorePackage(); } @Override protected Diagnostic doComputeEPackages(Monitor monitor) throws Exception { monitor.beginTask("", 2); monitor.subTask(JavaImporterPlugin.INSTANCE.getString("_UI_CreatingPackages_message")); JavaEcoreBuilder javaEcoreBuilder = new JavaEcoreBuilder(getGenModelFile(), getOriginalGenModel()); javaEcoreBuilder.computeEPackages(monitor, this); getReferencedGenPackages().clear(); getReferencedGenPackages().addAll(javaEcoreBuilder.getUsedGenPackages()); return javaEcoreBuilder.getDiagnostic(); } @Override protected void adjustGenModel(Monitor monitor) { super.adjustGenModel(monitor); getGenModel().getForeignModel().add("@model"); } }