/** * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE, Version 3, 29 June 2007; * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.gnu.org/licenses/lgpl-3.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.kevoree.tools.nativeN.generator; import org.kevoree.ContainerRoot; /** * Created with IntelliJ IDEA. * User: jed * Date: 19/10/12 * Time: 14:33 * To change this template use File | Settings | File Templates. */ public class CodeGeneratorJava extends AbstractCodeGenerator { public CodeGeneratorJava(ContainerRoot model) { super(model); } @Override public void execute() { // gen header ports gen_headerPorts.append(getProvidedPort()); gen_headerPorts.append(getRequiredPort()); gen_headerPorts.append(getDictonnaryHeader()); // gen port java to jni port dispatcher gen_ports.append(getJavaDispatcher()); // setter dico bridge gen_body.append(getBridgeDictonnary()); } private String getProvidedPort(){ StringBuilder gen = new StringBuilder(); int count=0; if(inputs_ports.size() >0 ) { gen.append("@Provides({"); for (String name : inputs_ports.keySet()){ gen.append(" @ProvidedPort(name = \""+name+"\", type = PortType.MESSAGE,theadStrategy = ThreadStrategy.NONE)"); if(count < inputs_ports.size()-1) { gen.append(",\n"); } else { gen.append("\n"); } count++; } gen.append("})"); } return gen.toString(); } public String getRequiredPort(){ StringBuilder gen = new StringBuilder(); int count=0; if(ouputs_ports.size() >0){ gen.append("@Requires({"); for (String name : ouputs_ports.keySet()){ gen.append(" @RequiredPort(name = \""+name+"\", type = PortType.MESSAGE,optional = true,theadStrategy = ThreadStrategy.NONE)"); if(count < ouputs_ports.size()-1) { gen.append(",\n"); } else { gen.append("\n"); } count++; } gen.append("})"); } return gen.toString(); } public String getBridgeDictonnary(){ StringBuilder gen = new StringBuilder(); if(dicos.size() > 0) { for(String dico : dicos.keySet()) { gen.append("nativeManager.setDico(\""+dico+"\",getDictionary().get(\""+dico+"\").toString()); \n"); } } return gen.toString(); } public String getDictonnaryHeader(){ StringBuilder gen = new StringBuilder(); int count=0; if(dicos.size() > 0){ gen.append("@DictionaryType({ "); for(String dico : dicos.keySet()) { gen.append("@DictionaryAttribute(name = \""+dico+"\", defaultValue = \"\", optional = true)"); if(count < dicos.size()-1) { gen.append(",\n"); } else { gen.append("\n"); } count++; } gen.append("})"); } return gen.toString(); } public String getJavaDispatcher(){ StringBuilder gen = new StringBuilder(); for (String name : inputs_ports.keySet()) { gen.append( " @Port(name = \""+name+"\")\n" + " public void "+name+"(Object o)\n" + " {\n" + " if(nativeManager != null)\n" + " {\n" + " nativeManager.push(\""+name+"\",o.toString());\n" + " \n" + " } else \n" + " {\n" + " System.err.println(\"Error processing message\");\n" + " }\n" + " }"); } return gen.toString(); } }