/*
*
* Copyright (C) 2012-2014 R T Huitema. All Rights Reserved.
* Web: www.42.co.nz
* Email: robert@42.co.nz
* Author: R T Huitema
*
* This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
* WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* 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 nz.co.fortytwo.signalk.server.signalk.json;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.SortedSet;
import java.util.TreeMap;
import java.util.TreeSet;
import mjson.Json;
import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
public class GetSignalkKeysTest {
private SortedSet<String> strings = new TreeSet<String>();
private Map<String, String> keys = new TreeMap<String,String>();
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
@Ignore
public void printKeys() throws IOException{
getAlarmKeys();
getSchemaKeys("design");
getCommunicationKeys();
getSchemaKeys("electrical_ac");
getSchemaKeys("electrical_dc");
getEnvironmentKeys();
getNavigationKeys();
getSchemaKeys("performance");
getPropulsionKeys();
getResourcesKeys();
getSchemaKeys("sails");
getSensorsKeys();
//getSchemaKeys("sources");
getSteeringKeys();
getTanksKeys();
for(String str: strings){
System.out.println(str.toUpperCase()+" = \""+str+"\"");
}
for(String keyName: keys.keySet()){
String constantName = keyName.replaceAll("\\.", "_");
constantName=constantName.replaceAll("environment_", "env_");
constantName=constantName.replaceAll("navigation_", "nav_");
System.out.println(constantName.toUpperCase()+" = \""+keyName+"\"");
}
}
public void getSchemaKeys(String group) throws IOException {
String env = FileUtils.readFileToString(new File(("/home/robert/gitrep/specification/schemas/groups/"+group+".json")));
//env = env.replaceAll("$","");
Json schema = Json.read(env);
System.out.println("public static final String environment = \""+group+"\";");
extractKeys(schema, group);
}
public void getEnvironmentKeys() throws IOException {
String env = FileUtils.readFileToString(new File(("/home/robert/gitrep/specification/schemas/groups/environment.json")));
//env = env.replaceAll("$","");
Json schema = Json.read(env);
System.out.println("public static final String environment = \"environment\";");
extractKeys(schema, "environment");
}
public void getNavigationKeys() throws IOException {
String env = FileUtils.readFileToString(new File(("/home/robert/gitrep/specification/schemas/groups/navigation.json")));
Json schema = Json.read(env);
System.out.println("public static final String navigation = \"navigation\";");
extractKeys(schema, "navigation");
}
public void getAlarmKeys() throws IOException {
String env = FileUtils.readFileToString(new File(("/home/robert/gitrep/specification/schemas/groups/alarms.json")));
Json schema = Json.read(env);
System.out.println("public static final String alarms = \"alarms\";");
extractKeys(schema, "alarms");
}
public void getCommunicationKeys() throws IOException {
String env = FileUtils.readFileToString(new File(("/home/robert/gitrep/specification/schemas/groups/communication.json")));
Json schema = Json.read(env);
System.out.println("public static final String communication = \"communication\";");
extractKeys(schema, "communication");
}
public void getPropulsionKeys() throws IOException {
String env = FileUtils.readFileToString(new File(("/home/robert/gitrep/specification/schemas/groups/propulsion.json")));
Json schema = Json.read(env);
System.out.println("public static final String propulsion = \"propulsion\";");
extractKeys(schema, "propulsion");
}
public void getResourcesKeys() throws IOException {
String env = FileUtils.readFileToString(new File(("/home/robert/gitrep/specification/schemas/groups/resources.json")));
Json schema = Json.read(env);
System.out.println("public static final String resources = \"resources\";");
extractKeys(schema, "resources");
}
public void getSensorsKeys() throws IOException {
String env = FileUtils.readFileToString(new File(("/home/robert/gitrep/specification/schemas/groups/sensors.json")));
Json schema = Json.read(env);
System.out.println("public static final String sensors = \"sensors\";");
extractKeys(schema, "sensors");
}
public void getSteeringKeys() throws IOException {
String env = FileUtils.readFileToString(new File(("/home/robert/gitrep/specification/schemas/groups/steering.json")));
Json schema = Json.read(env);
System.out.println("public static final String steering = \"steering\";");
extractKeys(schema, "steering");
}
public void getTanksKeys() throws IOException {
String env = FileUtils.readFileToString(new File(("/home/robert/gitrep/specification/schemas/groups/tanks.json")));
Json schema = Json.read(env);
System.out.println("public static final String tanks = \"tanks\";");
extractKeys(schema, "tanks");
}
public void extractKeys(Json schema, String path) {
Iterator<String> fieldNames = schema.asMap().keySet().iterator();
while (fieldNames.hasNext()) {
String fieldName = fieldNames.next();
if(!strings.contains(fieldName)){
strings.add(fieldName);
}
//ignore stuff here
if("id".equals(fieldName))continue;
if("title".equals(fieldName))continue;
if("source".equals(fieldName))continue;
if("timestamp".equals(fieldName))continue;
if("description".equals(fieldName))continue;
if("type".equals(fieldName))continue;
if("enum".equals(fieldName))continue;
if("example".equals(fieldName))continue;
if(fieldName.indexOf("$")>=0)continue;
if(fieldName.indexOf("patternProperties")>=0)continue;
if(!"properties".equals(fieldName)){
String keyName = path+"."+fieldName;
String type = null;
if( schema.at(fieldName)!=null && schema.at(fieldName).isObject() && schema.at(fieldName).at("type")!=null){
type = schema.at(fieldName).at("type").toString();
type=type.replace('"', ' ').trim();
}
if(type==null){
if( schema.at(fieldName)!=null && schema.at(fieldName).isObject() && schema.at(fieldName).at("$ref")!=null){
type = schema.at(fieldName).at("$ref").toString();
if(type.contains("numberValue"))type="number";
if(type.contains("stringValue"))type="string";
if(type.contains("version"))type="string";
if(type.contains("mmsi"))type="string";
if(type.contains("uuid"))type="string";
if(type.contains("version"))type="string";
if(type.contains("floatValue"))type="float";
if(type.contains("timestamp"))type="timestamp";
if(type.contains("nullValue"))type="null";
if(type.contains("alarmValue"))type="alarmValue";
if(type.contains("alarmMethod"))type="alarmMethod";
}
}
keyName=keyName.replaceAll(".properties","");
keyName=keyName.replaceAll(".additionalProperties","");
keys.put(keyName, type);
//System.out.println("public static final String "+constantName.toUpperCase()+ " = \"" + keyName+"\";");
//System.out.println("public static final "+type+" "+keyName+"=null;");
}
Json json = schema.at(fieldName);
if (json != null && json.isObject()) {
extractKeys(json, path+"."+fieldName);
}
}
}
}