blob: f20d5d0b6ac5db24d7f6275162151d6e7890b296 [file] [log] [blame]
/**
* Copyright (c) 2009, 2011 Mia-Software.
* 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:
* Gabriel Barbier (Mia-Software) - initial API and implementation
* Fabien Giquel (Mia-Software) - Bug 339720 : MoDisco Discoverers (infra + techno) API clean
*/
package org.eclipse.gmt.modisco.usecases.modelfilter.converter;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.gmt.modisco.infra.common.core.internal.logging.MoDiscoLogHandler;
import org.eclipse.gmt.modisco.infra.common.core.internal.utils.ModelUtils;
import org.eclipse.gmt.modisco.infra.common.core.logging.MoDiscoLogger;
import org.eclipse.gmt.modisco.infra.discoverymanager.DiscoveryParameter;
import org.eclipse.gmt.modisco.java.actions.DefaultDiscoverer;
import org.eclipse.gmt.modisco.java.actions.DiscoverKdmModelFromJavaProject;
import org.eclipse.gmt.modisco.kdm.uml2converter.KdmToUmlConverter;
import org.eclipse.gmt.modisco.kdm.uml2converter.impl.KdmtoUmlConverterImpl;
import org.eclipse.gmt.modisco.usecases.modelfilter.ModelFilterActivator;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.m2m.atl.common.ATLLogger;
/**
* @author Gabriel Barbier
*
*
* @deprecated use matching org.eclipse.modisco.x.y.z component,
* cf. https://bugs.eclipse.org/bugs/show_bug.cgi?id=470806
*/
@Deprecated
public class RealTypesJavaConverter {
private final Logger logger = Logger.getLogger(ATLLogger.LOGGER_ID);
private final IJavaProject javaProject;
private final IPath path;
private final URL umlTransformation;
public RealTypesJavaConverter(final IJavaProject javaProjectParameter)
throws JavaModelException {
this.javaProject = javaProjectParameter;
this.path = this.javaProject.getCorrespondingResource().getLocation()
.addTrailingSeparator().append(this.javaProject.getElementName());
this.umlTransformation = this.getClass().getResource("transformations/RealTypeUML.asm"); //$NON-NLS-1$
}
public Resource convertJavaProjectToUml2() throws JavaModelException {
Resource result = null;
final IPath logPath = this.path.addFileExtension("log"); //$NON-NLS-1$
final IPath kdmModelPath = this.path.addFileExtension("kdm"); //$NON-NLS-1$
final IPath umlModelPath = this.javaProject.getCorrespondingResource().getLocation()
.addTrailingSeparator()
.append(this.javaProject.getElementName() + "RealTypes").addFileExtension("uml"); //$NON-NLS-1$ //$NON-NLS-2$
// transformations chain
MoDiscoLogHandler logHandler = new MoDiscoLogHandler(logPath.toString());
RealTypesJavaConverter.this.logger.addHandler(logHandler);
try {
/* first step */
URI kdmModelUri = URI.createFileURI(kdmModelPath.toString());
/*
* We will make a specific treatment to improve performances: global reverse of project
* should be done only once. So, if it already exists, we will use the kdm model located
* on the root of the project, other else we have to create it.
*/
// for compatibility reason, we have to check that java model
// has been correctly loaded ...
if (kdmModelPath.toFile().exists()) {
try {
ResourceSet resourceSet = new ResourceSetImpl();
resourceSet.getResource(kdmModelUri, true);
} catch (Exception ioe) {
kdmModelPath.toFile().delete();
}
}
boolean forceUmlTransformation = false;
if (!kdmModelPath.toFile().exists()) {
forceUmlTransformation = true;
DiscoverKdmModelFromJavaProject javaDiscoverer = new DiscoverKdmModelFromJavaProject();
Map<DiscoveryParameter, Object> parameters = new HashMap<DiscoveryParameter, Object>();
parameters.put(DefaultDiscoverer.PARAMETER_SILENT_MODE, true);
javaDiscoverer.discoverElement(this.javaProject, parameters);
// for instance, the uri of kdm model has been statically computed from name of java
// project
}
/* second step */
KdmToUmlConverter converter = new KdmtoUmlConverterImpl();
URI outputURI = URI.createFileURI(URI.decode(umlModelPath.toString()));
forceUmlTransformation = forceUmlTransformation || (!umlModelPath.toFile().exists());
if (forceUmlTransformation) {
converter.getUML2ModelFromKDMModelWithCustomTransformation(kdmModelUri, false,
RealTypesJavaConverter.this.umlTransformation, outputURI);
/* third step, management of bidirectional links */
BidirectionalUmlConverter wgConverter = new BidirectionalUmlConverter();
wgConverter.manageBidirectionalAssociations(outputURI);
}
// load result resources ...
result = ModelUtils.loadModel(outputURI);
} catch (Exception e) {
MoDiscoLogger.logError(e, ModelFilterActivator.getDefault());
}
RealTypesJavaConverter.this.logger.removeHandler(logHandler);
logHandler.close();
try {
RealTypesJavaConverter.this.javaProject.getCorrespondingResource().refreshLocal(1,
new NullProgressMonitor());
} catch (Exception e1) {
MoDiscoLogger.logError(e1, ModelFilterActivator.getDefault());
}
return result;
}
}