/**
* Copyright (c) Istituto Nazionale di Fisica Nucleare, 2006-2014.
*
* 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.italiangrid.voms.request.impl;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileFilter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.Reader;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.italiangrid.voms.VOMSError;
import org.italiangrid.voms.request.VOMSESParser;
import org.italiangrid.voms.request.VOMSServerInfo;
public class LegacyVOMSESParserImpl implements VOMSESParser {
private final VOMSESLineParser lineParser = new VOMSESLineParser();
protected void fileSanityChecks(File f) {
if (!f.exists())
throw new VOMSError("VOMSES file does not exist: " + f.getAbsolutePath());
if (!f.canRead())
throw new VOMSError("VOMSES file is not readable: " + f.getAbsolutePath());
}
protected VOMSServerInfo parseLine(String vomsesLine)
throws URISyntaxException {
return lineParser.parse(vomsesLine);
}
public List<VOMSServerInfo> parse(Reader vomsesReader) {
BufferedReader reader = new BufferedReader(vomsesReader);
String line = null;
List<VOMSServerInfo> result = new ArrayList<VOMSServerInfo>();
try {
while ((line = reader.readLine()) != null) {
// Ignore comments
if (line.startsWith("#"))
continue;
// skip empty lines
if (line.matches("\\s*$"))
continue;
VOMSServerInfo parsedInfo = parseLine(line);
if (parsedInfo != null)
result.add(parsedInfo);
}
} catch (Exception e) {
throw new VOMSError("Error parsing VOMSES information...", e);
}
return result;
}
protected List<VOMSServerInfo> parseDirectory(File directory) {
Set<VOMSServerInfo> joinedServerInfo = new HashSet<VOMSServerInfo>();
File[] certFiles = directory.listFiles(new FileFilter() {
public boolean accept(File pathname) {
return pathname.isFile() && !pathname.getName().startsWith(".");
}
});
for (File f : certFiles)
joinedServerInfo.addAll(parse(f));
return new ArrayList<VOMSServerInfo>(joinedServerInfo);
}
public List<VOMSServerInfo> parse(File f) {
fileSanityChecks(f);
if (f.isDirectory())
return parseDirectory(f);
try {
BufferedReader r = new BufferedReader(new FileReader(f));
return parse(r);
} catch (FileNotFoundException e) {
throw new VOMSError("VOMSES file not found: " + f.getAbsolutePath(), e);
} catch (VOMSError e) {
throw new VOMSError("Error parsing VOMSES file: " + f.getAbsolutePath(),
e);
}
}
}