use of org.eclipse.vorto.core.api.model.informationmodel.InformationModel in project vorto by eclipse.
the class GeneratorMojo method execute.
public void execute() throws MojoExecutionException, MojoFailureException {
getLog().info("Executing Generator of class '" + getGeneratorClass());
try {
final IModelWorkspace workspace = IModelWorkspace.newReader().addZip(new ZipInputStream(new ByteArrayInputStream(loadInformationModels()))).read();
List<MappingModel> mappingModels = workspace.get().stream().filter(p -> p instanceof MappingModel).map(MappingModel.class::cast).collect(Collectors.toList());
for (Model model : workspace.get().stream().filter(p -> p instanceof InformationModel).collect(Collectors.toList())) {
InformationModel infomodel = (InformationModel) model;
IVortoCodeGenerator codeGenerator = (IVortoCodeGenerator) Class.forName(generatorClass).newInstance();
IGenerationResult result = codeGenerator.generate(infomodel, new InvocationContext(mappingModels, null, new HashMap<String, String>()), null);
if (result.getMediatype().equalsIgnoreCase("application/zip")) {
final ZipContentExtractCodeGeneratorTask task = new ZipContentExtractCodeGeneratorTask(result.getContent());
task.generate(null, InvocationContext.simpleInvocationContext(), new IGeneratedWriter() {
public void write(Generated generated) {
if (generated.getFileName() == null) {
File generatedDirectory = new File(outputPath, stripPath(generated.getFolderPath()));
generatedDirectory.mkdirs();
} else {
if (generated.getFileName().equals("pom.xml")) {
return;
}
File generatedDirectory = new File(outputPath, stripPath(generated.getFolderPath()));
File generatedFile = new File(generatedDirectory, generated.getFileName());
try {
FileUtils.writeByteArrayToFile(generatedFile, generated.getContent(), false);
} catch (IOException e) {
e.printStackTrace();
}
}
}
private String stripPath(String folderPath) {
final String mavenSourcePath = "src/main/java/";
if (folderPath.indexOf(mavenSourcePath) > -1) {
return folderPath.substring(folderPath.indexOf(mavenSourcePath) + mavenSourcePath.length());
}
return folderPath;
}
});
} else {
File generatedFile = new File(outputPath, result.getFileName());
FileUtils.writeByteArrayToFile(generatedFile, result.getContent(), false);
}
}
} catch (InstantiationException e) {
throw new MojoExecutionException("Could not instantiate vorto code generator from given generatorClass", e);
} catch (IllegalAccessException e) {
throw new MojoExecutionException("Error during resolving code generator", e);
} catch (ClassNotFoundException e) {
throw new MojoExecutionException("Could not instantiate vorto code generator from given generatorClass", e);
} catch (Exception e) {
throw new MojoExecutionException("Problem during code generator invocation", e);
}
}
use of org.eclipse.vorto.core.api.model.informationmodel.InformationModel in project vorto by eclipse.
the class CodeGenerationController method generate.
@RequestMapping(value = "/{namespace}/{name}/{version:.+}", method = RequestMethod.GET)
public ResponseEntity<InputStreamResource> generate(@PathVariable String namespace, @PathVariable String name, @PathVariable String version, final HttpServletRequest request) {
byte[] modelResources = downloadModelWithReferences(namespace, name, version);
IModelWorkspace workspace = IModelWorkspace.newReader().addZip(new ZipInputStream(new ByteArrayInputStream(modelResources))).read();
Model model = workspace.get().stream().filter(p -> p.getName().equals(name)).findFirst().get();
InformationModel infomodel = null;
if (model instanceof InformationModel) {
infomodel = (InformationModel) model;
} else if (model instanceof FunctionblockModel) {
infomodel = Utils.wrapFunctionBlock((FunctionblockModel) model);
}
IGenerationResult result = null;
try {
Map<String, String> requestParams = new HashMap<>();
request.getParameterMap().entrySet().stream().forEach(x -> requestParams.put(x.getKey(), x.getValue()[0]));
result = vortoGenerator.generate(infomodel, createInvocationContext(infomodel, vortoGenerator.getServiceKey(), requestParams), null);
} catch (Exception e) {
GenerationResultZip output = new GenerationResultZip(infomodel, vortoGenerator.getServiceKey());
Generated generated = new Generated("generation_error.log", "/generated", e.getMessage());
output.write(generated);
result = output;
}
return ResponseEntity.ok().contentLength(result.getContent().length).header("content-disposition", "attachment; filename = " + result.getFileName()).contentType(MediaType.parseMediaType(result.getMediatype())).body(new InputStreamResource(new ByteArrayInputStream(result.getContent())));
}
use of org.eclipse.vorto.core.api.model.informationmodel.InformationModel in project vorto by eclipse.
the class JsonGenerator method generate.
public GenerationResultZip generate(InformationModel infomodel, InvocationContext context, IVortoCodeGenProgressMonitor monitor) throws VortoCodeGeneratorException {
GenerationResultZip output = new GenerationResultZip(infomodel, getServiceKey());
GeneratorTaskFromFileTemplate<InformationModel> imTemplate = new GeneratorTaskFromFileTemplate<InformationModel>(new JsonIMTemplate());
imTemplate.generate(infomodel, context, output);
return output;
}
use of org.eclipse.vorto.core.api.model.informationmodel.InformationModel in project vorto by eclipse.
the class CoAPGenerator method generate.
public IGenerationResult generate(InformationModel infomodel, InvocationContext mappingContext, IVortoCodeGenProgressMonitor monitor) throws VortoCodeGeneratorException {
GenerationResultZip zipOutputter = new GenerationResultZip(infomodel, getServiceKey());
ChainedCodeGeneratorTask<InformationModel> generator = new ChainedCodeGeneratorTask<InformationModel>();
/*
/ Generate the client part...
*/
String CLIENT_PROJ = infomodel.getName() + COAP_CLIENT_PROJECT_SUFFIX;
initPaths(CLIENT_PROJ);
generator.addTask(new CoAPClientInformationModelGeneratorTask(JAVA_FILE_EXTENSION, imTargetPath, IM_PACKAGE, JAVA_INTERFACE_PREFIX, JAVA_IMPL_SUFFIX, GETTER_PREFIX, SETTER_PREFIX, FB_INTERFACE_PACKAGE, FB_IMPL_PACKAGE));
generator.addTask(new JavaInformationModelInterfaceGeneratorTask(JAVA_FILE_EXTENSION, imTargetPath, IM_PACKAGE, JAVA_INTERFACE_PREFIX, GETTER_PREFIX, SETTER_PREFIX, FB_INTERFACE_PACKAGE));
generator.addTask(new GeneratorTaskFromFileTemplate<InformationModel>(new ClientTemplate(coapClientPath, COAP_CLIENT_PACKAGE)));
generator.addTask(new GeneratorTaskFromFileTemplate<InformationModel>(new CoAPMethodTemplate(coapClientPath, COAP_CLIENT_PACKAGE)));
generator.addTask(new GeneratorTaskFromFileTemplate<InformationModel>(new ClientDemoAppTemplate(coapDemoPath, COAP_DEMO_PACKAGE)));
generator.addTask(new GeneratorTaskFromFileTemplate<InformationModel>(new PomFileTemplate("artifact", COAP_DEMO_PACKAGE + ".ClientDemoApp", CLIENT_PROJ)));
generator.generate(infomodel, mappingContext, zipOutputter);
for (FunctionblockProperty fbp : infomodel.getProperties()) {
FunctionBlock fb = fbp.getType().getFunctionblock();
for (Entity entity : Utils.getReferencedEntities(fb)) {
generateForEntity(entity, zipOutputter);
}
for (Enum en : Utils.getReferencedEnums(fb)) {
generateForEnum(en, zipOutputter);
}
for (Operation op : fb.getOperations()) {
generateForOperation(op, zipOutputter);
}
if (fb.getStatus() != null) {
for (Property property : fb.getStatus().getProperties()) {
generateForProperty(property, zipOutputter);
}
}
this.generateForClientFunctionBlock(fbp.getType(), zipOutputter);
}
/*
/ Generate the server part...
*/
String SERVER_PROJ = infomodel.getName() + COAP_SERVER_PROJECT_SUFFIX;
initPaths(SERVER_PROJ);
generator.addTask(new CoAPServerGeneratorTask(COAP_SERVER_NAME, COAP_SERVER_PACKAGE, JAVA_FILE_EXTENSION, coapServerPath, JAVA_INTERFACE_PREFIX + COAP_REQUEST_HANDLER_NAME, COAP_REQUEST_HANDLER_PACKAGE));
generator.addTask(new CoAPServerIMRequestHandlerGeneratorTask(COAP_REQUEST_HANDLER_NAME, JAVA_FILE_EXTENSION, coapRequestHandlerPath, COAP_REQUEST_HANDLER_PACKAGE, JAVA_INTERFACE_PREFIX, COAP_PRIM_TYPE_WRAPPER_SUFFIX, IM_PACKAGE, DT_PACKAGE, getOpParamSetPackage(), getPrimitiveParamWrapperPackage()));
generator.addTask(new JavaInformationModelGeneratorTask(JAVA_FILE_EXTENSION, imTargetPath, IM_PACKAGE, JAVA_INTERFACE_PREFIX, JAVA_IMPL_SUFFIX, GETTER_PREFIX, SETTER_PREFIX, FB_INTERFACE_PACKAGE, FB_IMPL_PACKAGE));
generator.addTask(new JavaInformationModelInterfaceGeneratorTask(JAVA_FILE_EXTENSION, imTargetPath, IM_PACKAGE, JAVA_INTERFACE_PREFIX, GETTER_PREFIX, SETTER_PREFIX, FB_INTERFACE_PACKAGE, FB_IMPL_PACKAGE));
generator.addTask(new GeneratorTaskFromFileTemplate<InformationModel>(new ICoAPRequestHandlerTemplate(coapRequestHandlerPath, COAP_REQUEST_HANDLER_PACKAGE)));
generator.addTask(new GeneratorTaskFromFileTemplate<InformationModel>(new JsonTransformerTemplate(coapRequestHandlerPath, COAP_REQUEST_HANDLER_PACKAGE)));
generator.addTask(new GeneratorTaskFromFileTemplate<InformationModel>(new URIAnalyzerTemplate(coapRequestHandlerPath, COAP_REQUEST_HANDLER_PACKAGE)));
generator.addTask(new GeneratorTaskFromFileTemplate<InformationModel>(new ResourceTemplate(coapServerPath, COAP_SERVER_PACKAGE, COAP_REQUEST_HANDLER_PACKAGE)));
generator.addTask(new GeneratorTaskFromFileTemplate<InformationModel>(new LinkTemplate(coapServerPath, COAP_SERVER_PACKAGE)));
generator.addTask(new GeneratorTaskFromFileTemplate<InformationModel>(new CoAPServerDemoAppTemplate(coapDemoPath, COAP_DEMO_PACKAGE, COAP_REQUEST_HANDLER_PACKAGE, COAP_SERVER_PACKAGE)));
generator.addTask(new GeneratorTaskFromFileTemplate<InformationModel>(new PomFileTemplate("artifact", COAP_DEMO_PACKAGE + ".ServerDemoApp", SERVER_PROJ)));
generator.generate(infomodel, mappingContext, zipOutputter);
for (FunctionblockProperty fbp : infomodel.getProperties()) {
this.generateForFunctionBlock(fbp.getType(), zipOutputter);
FunctionBlock fb = fbp.getType().getFunctionblock();
for (Entity entity : Utils.getReferencedEntities(fb)) {
generateForEntity(entity, zipOutputter);
}
for (Enum en : Utils.getReferencedEnums(fb)) {
generateForEnum(en, zipOutputter);
}
for (Operation op : fb.getOperations()) {
generateForOperation(op, zipOutputter);
}
}
return zipOutputter;
}
use of org.eclipse.vorto.core.api.model.informationmodel.InformationModel in project vorto by eclipse.
the class DeviceImpl method setInfomodel.
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setInfomodel(InformationModel newInfomodel) {
InformationModel oldInfomodel = infomodel;
infomodel = newInfomodel;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.DEVICE__INFOMODEL, oldInfomodel, infomodel));
}
Aggregations