/**
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 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.drools.guvnor.client.packages;
import java.util.Iterator;
import org.drools.guvnor.client.packages.PackageHeaderWidget.Global;
import org.drools.guvnor.client.packages.PackageHeaderWidget.Import;
import org.drools.guvnor.client.packages.PackageHeaderWidget.Types;
public class PackageHeaderHelper {
/**
* Attempt to parse out a model, if it can't, it will return null in which case an "advanced" editor should be used.
*/
static Types parseHeader(String header) {
if (header == null || header.equals("")) {
Types t = new Types();
return t;
} else {
Types t = new Types();
String[] lines = header.split("\\n");
for (int i = 0; i < lines.length; i++) {
String tk = lines[i].trim();
if (!tk.equals("") && !tk.startsWith("#")) {
if (tk.startsWith("import")) {
tk = tk.substring(6).trim();
if (tk.endsWith(";")) {
tk = tk.substring(0, tk.length() - 1);
}
t.imports.add(new Import(tk));
} else if (tk.startsWith("global")) {
tk = tk.substring(6).trim();
if (tk.endsWith(";")) {
tk = tk.substring(0, tk.length() - 1);
}
String[] gt = tk.split("\\s+");
t.globals.add(new Global(gt[0], gt[1]));
} else if(tk.startsWith("rule")) {
t.hasRules = true;
return t;
} else if(tk.startsWith("declare")) {
t.hasDeclaredTypes = true;
return t;
} else if(tk.startsWith("function")) {
t.hasFunctions = true;
return t;
} else {
return null;
}
}
}
return t;
}
}
static String renderTypes(Types t) {
StringBuffer sb = new StringBuffer();
for (Iterator iterator = t.imports.iterator(); iterator.hasNext();) {
Import i = (Import) iterator.next();
sb.append("import " + i.type + "\n");
}
for (Iterator it = t.globals.iterator(); it.hasNext();) {
Global g = (Global) it.next();
sb.append("global " + g.type + " " + g.name);
if (it.hasNext()) {
sb.append('\n');
}
}
return sb.toString();
}
}