/*=============================================================================# # Copyright (c) 2008-2016 Stephan Wahlbrink (WalWare.de) and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the GNU Lesser General Public License # v2.1 which accompanies this distribution, and is available at # http://www.gnu.org/licenses/lgpl.html # # Contributors: # Stephan Wahlbrink - initial API and implementation #=============================================================================*/ package de.walware.rj.server.jri; import static de.walware.rj.server.jri.JRIServerErrors.LOGGER; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.Charset; import java.util.Map; import java.util.logging.Level; import java.util.logging.LogRecord; final class ServerUtils { private final static int TEMP_CHAR_BUFFER_LENGTH= 0x800; private final char[] rTempCharBuffer= new char[TEMP_CHAR_BUFFER_LENGTH]; private final StringBuilder rTempStringBuilder= new StringBuilder(0x2000); private final Map<String, Object> platformData; private int[] rVersion; public ServerUtils(final Map<String, Object> platformData) { this.platformData= platformData; } public String concat(final String[] array, final char sep) { this.rTempStringBuilder.setLength(0); for (int i= 0; i < array.length; i++) { this.rTempStringBuilder.append(array[i]); this.rTempStringBuilder.append(sep); } return this.rTempStringBuilder.toString(); } public String readFile(final File file, final Charset charset) { this.rTempStringBuilder.setLength(0); InputStreamReader reader= null; try { reader= new InputStreamReader(new FileInputStream(file), charset); int read; while ((read= reader.read(this.rTempCharBuffer, 0, TEMP_CHAR_BUFFER_LENGTH)) >= 0) { this.rTempStringBuilder.append(this.rTempCharBuffer, 0, read); } return reader.toString(); } catch (final IOException e) { final LogRecord record= new LogRecord(Level.WARNING, "An error occurred when reading source file ''{0}''."); record.setParameters(new Object[] { file.getAbsolutePath() }); record.setThrown(e); LOGGER.log(record); return null; } finally { if (reader != null) { try { reader.close(); } catch (final IOException e) {} } } } public String checkFilename(final String filename) { if (filename.charAt(0) == '\\') { return (filename.indexOf('/', 1) > 0) ? filename.replace('/', '\\') : filename; } else { return (filename.indexOf('\\', 1) > 0) ?filename.replace('\\', '/') : filename; } } public Object getPlatformDataValue(final String key) { return this.platformData.get(key); } public int[] getRVersion() { if (this.rVersion == null) { final Object value= this.platformData.get("version.string"); //$NON-NLS-1$ if (value instanceof String) { final String[] segments= ((String) value).split("\\."); //$NON-NLS-1$ if (segments.length >= 3) { try { final int[] version= new int[3]; for (int i= 0; i < 3; i++) { version[i]= Integer.parseInt(segments[i]); } this.rVersion= version; } catch (final NumberFormatException e) {} } } } return this.rVersion; } public boolean isRVersionEqualGreater(final int major, final int minor) { final int[] rVersion= getRVersion(); return (rVersion != null && (rVersion[0] > major || (rVersion[0] == major && rVersion[1] >= minor) )); } public boolean isRVersionLess(final int major, final int minor) { final int[] rVersion= getRVersion(); return (rVersion != null && (rVersion[0] < major || (rVersion[0] == major && rVersion[1] < minor) )); } }