blob: 51330231788231557edeef7b24288bc9e9330789 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.uima.ducc.ws;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import org.apache.uima.ducc.common.IDuccEnv;
import org.apache.uima.ducc.common.utils.DuccLogger;
import org.apache.uima.ducc.common.utils.DuccLoggerComponents;
import org.apache.uima.ducc.common.utils.id.DuccId;
/**
* A class to interpret the $DUCC_HOME/resources/ducc.nodes file
*
* The file comprises lines of the following types:
* 1. #comment
* 2. node.domain
* 3. import <filename>
*/
public class DuccNodes {
private static DuccLogger logger = DuccLoggerComponents.getWsLogger(DuccNodes.class.getName());
private static DuccId jobid = null;
private static DuccNodes duccNodes = new DuccNodes();
private boolean sysout = false;
public static DuccNodes getInstance() {
return duccNodes;
}
public static DuccNodes getSysOutInstance() {
DuccNodes retVal = new DuccNodes();
retVal.sysout = true;
return retVal;
}
private class NodeSet {
public ArrayList<String> nodes = new ArrayList<String>();
public ArrayList<String> imports = new ArrayList<String>();
}
private void warn(String location, DuccId jobid, String text) {
if(sysout) {
System.out.println(location+" "+text);
}
else {
logger.warn(location, jobid, text);
}
}
private void trace(String location, DuccId jobid, String text) {
if(sysout) {
System.out.println(location+" "+text);
}
else {
logger.trace(location, jobid, text);
}
}
private void ignore(String fileName, String reason) {
String location = "ignore";
String text = "file:"+fileName+" "+"reason:"+reason;
warn(location, jobid, text);
}
private void ignore(String fileName, int lineno, String line, String reason) {
String location = "ignore";
String text = "file:"+fileName+" "+"#"+lineno+" "+line+" "+"reason:"+reason;
warn(location, jobid, text);
}
private void duplicate(String fileName, int lineno, String line) {
String location = "duplicate";
String text = "file:"+fileName+" "+"#"+lineno+" "+line;
trace(location, jobid, text);
}
private NodeSet get(String dirResources, String fileName, NodeSet nodeSet) {
String filePath = fileName;
if(!fileName.startsWith(File.separator)) {
filePath = dirResources+fileName;
}
try {
BufferedReader in = new BufferedReader(new FileReader(filePath));
String line;
int lineno = 0;
while ((line = in.readLine()) != null) {
lineno++;
line = line.trim();
if(line.length() == 0) {
}
else if(line.startsWith("#")) {
}
else {
String[] nvp = line.split(" ");
if(nvp.length == 1) {
String value = nvp[0].trim();
if(value.equals("import")) {
ignore(filePath, lineno, line, "import file missing");
}
else {
if(nodeSet.nodes.contains(value)) {
duplicate(filePath, lineno, line);
}
else {
nodeSet.nodes.add(value);
}
}
}
else if(nvp.length == 2) {
String key = nvp[0].trim();
String value = nvp[1].trim();
if(key.equals("import")) {
if(!value.startsWith(File.separator)) {
value = dirResources+value;
}
if(nodeSet.imports.contains(value)) {
duplicate(filePath, lineno, line);
}
else {
get(dirResources, value, nodeSet);
}
}
else {
ignore(filePath, lineno, line, "expected import");
}
}
// sim node
else if(nvp.length == 3) {
String value = nvp[1].trim()+"-"+nvp[0].trim();
if(nodeSet.nodes.contains(value)) {
duplicate(filePath, lineno, line);
}
else {
nodeSet.nodes.add(value);
}
}
else {
ignore(filePath, lineno, line, "too many items on line");
}
}
}
in.close();
}
catch (IOException e) {
ignore(filePath, "file not found");
}
return nodeSet;
}
public ArrayList<String> get(String resourcesDir, String fileName) {
NodeSet nodeSet = new NodeSet();
get(resourcesDir, fileName, nodeSet);
return nodeSet.nodes;
}
public ArrayList<String> get() {
String dirResources = IDuccEnv.DUCC_RESOURCES_DIR;
String fileName = IDuccEnv.DUCC_NODES_FILE_NAME;
return get(dirResources, fileName);
}
public static void main(String[] args) {
String dirResources = IDuccEnv.DUCC_RESOURCES_DIR;
String fileName = IDuccEnv.DUCC_NODES_FILE_NAME;
ArrayList<String> nodes = DuccNodes.getSysOutInstance().get(dirResources,fileName);
Iterator<String> iterator = nodes.iterator();
while(iterator.hasNext()) {
String value = iterator.next();
System.out.println(value);
}
}
}