blob: 73836f30f1f2e29050593e54f5fecb6140c4751b [file] [log] [blame]
/**
* *******************************************************************************
* Copyright (c) 2017 Timing-Architects Embedded Systems GmbH 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:
* Timing-Architects Embedded Systems GmbH - initial API and implementation
*
* *******************************************************************************
*/
package org.eclipse.app4mc.amalthea.generator.ui;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.wizard.Wizard;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.app4mc.amalthea.generator.ModelGenerator;
import org.eclipse.app4mc.amalthea.generator.configuration.RTMGC;
import org.eclipse.app4mc.amalthea.generator.configuration.RTMGCPackage;
import org.eclipse.core.runtime.IProgressMonitor;
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.emf.ecore.xmi.XMLResource;
public class ConfigurationWizard extends Wizard implements IRunnableWithProgress {
private ImportPage importPage;
private ConfigurationPage configurationPage;
private ExportPage exportPage;
private boolean canFinish = false;
private RTMGC rtmgc = null;
public ConfigurationWizard() {
super();
setNeedsProgressMonitor(true);
}
public void setCanFinish(boolean canFinish) {
this.canFinish = canFinish;
}
@Override
public String getWindowTitle() {
return "AMALTHEA Model Generator";
}
@Override
public void addPages() {
importPage = new ImportPage();
configurationPage = new ConfigurationPage();
exportPage = new ExportPage();
addPage(importPage);
addPage(configurationPage);
addPage(exportPage);
}
@Override
public boolean canFinish() {
return this.canFinish & configurationPage.isPageComplete();
}
@Override
public boolean performFinish() {
boolean result = true;
this.rtmgc = this.configurationPage.getConfiguration();
try {
getContainer().run(true, true, this);
} catch (Exception e) {
e.printStackTrace();
result = false;
}
return result;
}
@Override
public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
// determine how many models to be generated
int amount = this.rtmgc.getGeneration().getCount().intValue();
monitor.beginTask("Model Generation", amount + 1);
// export configuration
if(true == this.exportPage.doExport()) {
monitor.subTask("Export Configuration");
File file = this.exportPage.getFile();
exportConfiguration(file, this.rtmgc);
monitor.worked(1);
}
// start model generation
ModelGenerator modelGenerator = new ModelGenerator();
try {
modelGenerator.run(this.rtmgc, monitor);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// for (int i=0; i<amount;i++) {
// monitor.internalWorked(1);
// Thread.sleep(2000);
// if (monitor.isCanceled()) {
// break;
// }
// }
}
private void exportConfiguration(final File file, RTMGC rtmgc) {
file.getParentFile().mkdirs();
try {
file.createNewFile();
final URI uri = URI.createFileURI(file.getAbsolutePath());
final ResourceSet resourceSet = new ResourceSetImpl();
final Resource outResource = resourceSet.createResource(uri);
outResource.getContents().clear();
outResource.getContents().add(rtmgc);
// fixXmlnsAndXsiSchemaLocation(documentRoot);
final Map<Object, Object> saveOptions = new HashMap<Object, Object>();
saveOptions.put(XMLResource.OPTION_KEEP_DEFAULT_CONTENT, Boolean.TRUE);
saveOptions.put(XMLResource.OPTION_SCHEMA_LOCATION, Boolean.TRUE);
saveOptions.put(XMLResource.OPTION_ENCODING, "UTF-8");
saveOptions.put(XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE);
saveOptions.put(XMLResource.XML_SCHEMA_URI, RTMGCPackage.eNS_PREFIX);
outResource.save(saveOptions);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}