2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.controller.config.yangjmxgenerator.plugin;
11 import java.util.ArrayList;
12 import java.util.Collection;
13 import java.util.Iterator;
14 import java.util.List;
17 import org.opendaylight.controller.config.yangjmxgenerator.ModuleMXBeanEntry;
18 import org.opendaylight.controller.config.yangjmxgenerator.RuntimeBeanEntry;
19 import org.opendaylight.controller.config.yangjmxgenerator.ServiceInterfaceEntry;
20 import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.FtlFilePersister;
21 import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.FtlTemplate;
22 import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.RuntimeRegistratorFtlTemplate;
23 import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.TemplateFactory;
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
27 import com.google.common.collect.Lists;
29 final class FreeMarkerCodeWriterImpl implements CodeWriter {
31 private static final Logger logger = LoggerFactory
32 .getLogger(FreeMarkerCodeWriterImpl.class);
34 private final FtlFilePersister ftlFilePersister = new FtlFilePersister();
36 public FreeMarkerCodeWriterImpl() {
40 public File writeSie(ServiceInterfaceEntry sie, File outputBaseDir) {
42 Collection<FtlTemplate> values = TemplateFactory.getFtlTemplates(
44 return ftlFilePersister.persist(values, outputBaseDir, true).get(0);
45 } catch (Exception e) {
46 String message = "An error occurred during Service interface generating, sie:"
47 + sie.getTypeName() + ", " + sie.getFullyQualifiedName();
48 logger.error(message, e);
49 throw new RuntimeException(message, e);
54 public List<File> writeMbe(ModuleMXBeanEntry mbe, File targetBaseDir,
55 File mainBaseDir, File resourceBaseDir) {
57 List<File> generatedFiles = Lists.newArrayList();
59 generatedFiles.addAll(ftlFilePersister.persist(TemplateFactory
60 .getFtlTemplates(mbe).values(), targetBaseDir, true));
61 generatedFiles.addAll(ftlFilePersister.persist(TemplateFactory
62 .getFtlStubTemplates(mbe).values(), mainBaseDir, false));
64 // write runtime bean MXBeans and registrators
65 Collection<RuntimeBeanEntry> runtimeBeans = mbe.getRuntimeBeans();
66 if (runtimeBeans.size() > 0) {
67 List<FtlTemplate> allFtlFiles = new ArrayList<>();
69 Map<String, FtlTemplate> registratorNamesToFtls = RuntimeRegistratorFtlTemplate
70 .create(RuntimeRegistratorFtlTemplate.findRoot(runtimeBeans));
72 allFtlFiles.addAll(registratorNamesToFtls.values());
74 { // TOs, MXBean interfaces
75 for (RuntimeBeanEntry runtimeBeanEntry : runtimeBeans) {
76 Collection<FtlTemplate> ftlFiles = TemplateFactory
77 .getTOAndMXInterfaceFtlFiles(runtimeBeanEntry)
79 allFtlFiles.addAll(ftlFiles);
82 boolean overwrite = true;
84 FtlFilePersister ftlFilePersister = new FtlFilePersister();
85 List<File> persisted = ftlFilePersister.persist(allFtlFiles,
86 targetBaseDir, overwrite);
87 // FIXME: check for intersection
88 generatedFiles.addAll(persisted);
92 for (Iterator<File> it = generatedFiles.iterator(); it.hasNext();) {
93 if (it.next() == null) {
98 return generatedFiles;
100 } catch (Exception e) {
101 String message = "An error occurred during Module generating, mbe:"
102 + mbe.getJavaNamePrefix();
103 logger.error(message, e);
104 throw new RuntimeException(message, e);