blob: 27403de3a627aab2158595a71afcde8db45b0d1b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011, 2013 Formal Mind GmbH and University of Dusseldorf.
*
* 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:
* Lukas Ladenberger - initial API and implementation
******************************************************************************/
package org.eclipse.rmf.reqif10.pror.genhtml;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Map;
import org.eclipse.emf.common.command.BasicCommandStack;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.xmi.XMLResource;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
import org.eclipse.rmf.reqif10.ReqIF;
import org.eclipse.rmf.reqif10.ReqIF10Package;
import org.eclipse.rmf.reqif10.Specification;
import org.eclipse.rmf.reqif10.pror.configuration.util.ConfigurationAdapterFactory;
import org.eclipse.rmf.reqif10.pror.editor.util.ProrEditorUtil;
import org.eclipse.rmf.reqif10.pror.presentation.headline.util.HeadlineAdapterFactory;
import org.eclipse.rmf.reqif10.pror.presentation.id.util.IdAdapterFactory;
import org.eclipse.rmf.reqif10.pror.presentation.linewrap.util.LinewrapAdapterFactory;
import org.eclipse.rmf.reqif10.pror.provider.ReqIF10ItemProviderAdapterFactory;
import org.eclipse.rmf.reqif10.serialization.ReqIF10ResourceFactoryImpl;
import org.eclipse.rmf.reqif10.serialization.ReqIF10ResourceImpl;
import org.eclipse.rmf.serialization.XMLPersistenceMappingResourceSetImpl;
/**
* Standalone-executable class that is used to non-interactively generate HTML
* from .reqif files. This is used, for instance, to generate viewable
* specifications on the Eclipse Jenkins build system.
*
* @author ladenberger
* @author jastram
*
*/
public class GenerateHtml {
public static void main(String[] args) throws FileNotFoundException,
IOException {
ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory(
ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
adapterFactory
.addAdapterFactory(new ResourceItemProviderAdapterFactory());
adapterFactory.addAdapterFactory(new ConfigurationAdapterFactory());
adapterFactory
.addAdapterFactory(new ReqIF10ItemProviderAdapterFactory());
// FIXME (mj) I would prefer not to generate these - does it work
// without?
// adapterFactory.addAdapterFactory(new
// XhtmlItemProviderAdapterFactory());
adapterFactory
.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
adapterFactory.addAdapterFactory(new HeadlineAdapterFactory());
adapterFactory.addAdapterFactory(new LinewrapAdapterFactory());
adapterFactory.addAdapterFactory(new IdAdapterFactory());
BasicCommandStack commandStack = new BasicCommandStack();
AdapterFactoryEditingDomain editingDomain = new AdapterFactoryEditingDomain(adapterFactory,
commandStack, new XMLPersistenceMappingResourceSetImpl());
// iterate reqif dump folder
File f = new File("specifications/reqif");
System.out.println("===> ReqIF specifications folder exists? ===> "
+ f.exists());
if (f.exists()) {
File[] fileArray = f.listFiles();
for (File file : fileArray) {
if (file.getName().endsWith(".reqif")) {
System.out.println("===> Loading ReqIF file " + file.getName());
ReqIF reqif = loadData(file);
if (reqif != null) {
for (Specification spec : reqif.getCoreContent()
.getSpecifications()) {
String fileName = file.getName();
int mid = fileName.lastIndexOf(".");
String fname = fileName.substring(0, mid);
String createHtmlHeader = ProrEditorUtil
.createHtmlContent(spec, editingDomain,
adapterFactory);
System.out
.println("===> Generate HTML file for Loading ReqIF file "
+ file.getName());
String htmlFileName = fname + "_"
+ spec.getIdentifier() + ".html";
File htmlFile = new File("specifications/html/"
+ htmlFileName);
Writer output = new BufferedWriter(new FileWriter(
htmlFile));
output.write(createHtmlHeader);
output.close();
}
}
}
}
}
}
public static ReqIF loadData(File file) throws FileNotFoundException,
IOException {
XMLPersistenceMappingResourceSetImpl resourceSet = new XMLPersistenceMappingResourceSetImpl();
Map<String, Object> extensionToFactoryMap = resourceSet
.getResourceFactoryRegistry().getExtensionToFactoryMap();
extensionToFactoryMap.put("reqif", new ReqIF10ResourceFactoryImpl());
resourceSet.getPackageRegistry().put(ReqIF10Package.eNS_URI,
ReqIF10Package.eINSTANCE);
resourceSet.getPackageRegistry().put(
XMLResource.OPTION_RECORD_UNKNOWN_FEATURE, Boolean.FALSE);
URI fileURI = URI.createFileURI(file.getPath());
Resource resource = (ReqIF10ResourceImpl) resourceSet
.createResource(fileURI);
resource.load(extensionToFactoryMap);
return (ReqIF) resource.getContents().get(0);
}
}