private void initializeSoftPkg( final String lang, final String projectName, final ICodeGeneratorDescriptor code_gen, final ITemplateDesc template, final SoftPkg spd, final Implementation impl, final ImplementationSettings settings) { spd.setId(DceUuidUtil.createDceUUID()); spd.setName(projectName); final ProgrammingLanguage pl = SpdFactory.eINSTANCE.createProgrammingLanguage(); final HumanLanguage hl = SpdFactory.eINSTANCE.createHumanLanguage(); pl.setName(lang); impl.setProgrammingLanguage(pl); hl.setName(RedhawkCodegenActivator.ENGLISH); impl.setHumanLanguage(hl); if (code_gen.getCompiler() != null) { final Compiler c = SpdFactory.eINSTANCE.createCompiler(); c.setName(code_gen.getCompiler()); c.setVersion(code_gen.getCompilerVersion()); impl.setCompiler(c); } else { impl.setCompiler(null); } if (code_gen.getRuntime() != null) { final mil.jpeojtrs.sca.spd.Runtime r = SpdFactory.eINSTANCE.createRuntime(); r.setName(code_gen.getRuntime()); r.setVersion(code_gen.getRuntimeVersion()); impl.setRuntime(r); } else { impl.setRuntime(null); } settings.setGeneratorId(code_gen.getId()); settings.setOutputDir(CodegenFileHelper.createDefaultOutputDir(spd, code_gen)); settings.setTemplate(template.getId()); impl.setId(settings.getOutputDir()); }
@SuppressWarnings("deprecation") private WaveDevSettings getWaveDevSettings( final ResourceSet set, final SoftPkg softPkg, final String codegenId, final String templateId) throws CoreException { WaveDevSettings retVal = null; // First, try to get the .wavedev from disk. This will throw an exception if it fails. try { retVal = CodegenUtil.getWaveDevSettings( set.getResource(CodegenUtil.getSettingsURI(softPkg), true)); } catch (final Exception e) { System.out.println("Unable to find the settings file, inferring defaults"); } // if we weren't able to find the wavedev, create it if (retVal == null) { retVal = CodegenFactory.eINSTANCE.createWaveDevSettings(); // Recreate the basic settings for each implementation // This makes assumptions that the defaults are selected for everything for (final Implementation impl : softPkg.getImplementation()) { final ImplementationSettings settings = CodegenFactory.eINSTANCE.createImplementationSettings(); final String lang = impl.getProgrammingLanguage().getName(); // Find the code generator if specified, otherwise pick the first one returned by the // registry ICodeGeneratorDescriptor codeGenDesc = null; if (codegenId != null) { codeGenDesc = RedhawkCodegenActivator.getCodeGeneratorsRegistry().findCodegen(codegenId); } else { final ICodeGeneratorDescriptor[] codeGens = RedhawkCodegenActivator.getCodeGeneratorsRegistry().findCodegenByLanguage(lang); if (codeGens.length > 0) { codeGenDesc = codeGens[0]; } } // Proceed if we found one if (codeGenDesc != null) { final IScaComponentCodegen generator = codeGenDesc.getGenerator(); // Assume that there is <name>[/].+<other> format for the entrypoint // Pick out <name> for both the output dir and settings name final String lf = impl.getCode().getEntryPoint(); final String name = lf.substring(0, lf.indexOf('/')); // Set the generator, settings name and output directory settings.setGeneratorId(generator.getClass().getCanonicalName()); settings.setName(name); settings.setOutputDir(lf.substring(0, lf.lastIndexOf('/'))); // Find the template if specified, otherwise pick the first selectable and defaultable one // returned by the registry ITemplateDesc templateDesc = null; if (templateId != null) { templateDesc = RedhawkCodegenActivator.getCodeGeneratorTemplatesRegistry() .findTemplate(templateId); } else { final ITemplateDesc[] templates = RedhawkCodegenActivator.getCodeGeneratorTemplatesRegistry() .findTemplatesByCodegen(settings.getGeneratorId()); for (final ITemplateDesc itd : templates) { if (itd.isSelectable() && !itd.notDefaultableGenerator()) { templateDesc = itd; break; } } } // If we found the template, use it if (templateDesc != null) { // Set the properties to their default values for (final IPropertyDescriptor prop : templateDesc.getPropertyDescriptors()) { final Property p = CodegenFactory.eINSTANCE.createProperty(); p.setId(prop.getKey()); p.setValue(prop.getDefaultValue()); settings.getProperties().add(p); } // Set the template settings.setTemplate(templateDesc.getId()); } else { System.err.println("Unable to find a valid template! Desired: " + templateId); } } else { System.err.println("Unable to find a valid Code Generator! Desired: " + codegenId); } // Save the created settings retVal.getImplSettings().put(impl.getId(), settings); } // Create the URI to the .wavedev file final URI uri = URI.createPlatformResourceURI( softPkg.getName() + "/." + softPkg.getName() + ".wavedev", false); final Resource res = set.createResource(uri); // Add the WaveDevSettings to the resource and save to disk to persist the newly created // WaveDevSettings res.getContents().add(retVal); try { res.save(null); } catch (final IOException e) { } } return retVal; }