| /* |
| * libbrlapi - A library providing access to braille terminals for applications. |
| * |
| * Copyright (C) 2006-2023 by |
| * Samuel Thibault <Samuel.Thibault@ens-lyon.org> |
| * Sébastien Hinderer <Sebastien.Hinderer@ens-lyon.org> |
| * |
| * libbrlapi comes with ABSOLUTELY NO WARRANTY. |
| * |
| * This is free software, placed under the terms of the |
| * GNU Lesser General Public License, as published by the Free Software |
| * Foundation; either version 2.1 of the License, or (at your option) any |
| * later version. Please see the file LICENSE-LGPL for details. |
| * |
| * Web Page: http://brltty.app/ |
| * |
| * This software is maintained by Dave Mielke <dave@mielke.cc>. |
| */ |
| |
| package org.a11y.brlapi; |
| |
| import java.lang.reflect.Field; |
| import java.lang.reflect.Modifier; |
| import java.util.Arrays; |
| import org.a11y.brlapi.parameters.*; |
| |
| public class Parameters extends ParameterComponent { |
| public final ServerVersionParameter serverVersion; |
| public final ClientPriorityParameter clientPriority; |
| public final DriverNameParameter driverName; |
| public final DriverCodeParameter driverCode; |
| public final DriverVersionParameter driverVersion; |
| public final DeviceModelParameter deviceModel; |
| public final DeviceCellSizeParameter deviceCellSize; |
| public final DisplaySizeParameter displaySize; |
| public final DeviceIdentifierParameter deviceIdentifier; |
| public final DeviceSpeedParameter deviceSpeed; |
| public final DeviceOnlineParameter deviceOnline; |
| public final RetainDotsParameter retainDots; |
| public final ComputerBrailleCellSizeParameter computerBrailleCellSize; |
| public final LiteraryBrailleParameter literaryBraille; |
| public final CursorDotsParameter cursorDots; |
| public final CursorBlinkPeriodParameter cursorBlinkPeriod; |
| public final CursorBlinkPercentageParameter cursorBlinkPercentage; |
| public final RenderedCellsParameter renderedCells; |
| public final SkipIdenticalLinesParameter skipIdenticalLines; |
| public final AudibleAlertsParameter audibleAlerts; |
| public final ClipboardContentParameter clipboardContent; |
| public final BoundCommandKeycodesParameter boundCommandKeycodes; |
| public final CommandKeycodeNameParameter commandKeycodeName; |
| public final CommandKeycodeSummaryParameter commandKeycodeSummary; |
| public final DefinedDriverKeycodesParameter definedDriverKeycodes; |
| public final DriverKeycodeNameParameter driverKeycodeName; |
| public final DriverKeycodeSummaryParameter driverKeycodeSummary; |
| public final ComputerBrailleRowsMaskParameter computerBrailleRowsMask; |
| public final ComputerBrailleRowCellsParameter computerBrailleRowCells; |
| public final ComputerBrailleTableParameter computerBrailleTable; |
| public final LiteraryBrailleTableParameter literaryBrailleTable; |
| public final MessageLocaleParameter messageLocale; |
| |
| public Parameters (ConnectionBase connection) { |
| super(); |
| |
| serverVersion = new ServerVersionParameter(connection); |
| clientPriority = new ClientPriorityParameter(connection); |
| driverName = new DriverNameParameter(connection); |
| driverCode = new DriverCodeParameter(connection); |
| driverVersion = new DriverVersionParameter(connection); |
| deviceModel = new DeviceModelParameter(connection); |
| deviceCellSize = new DeviceCellSizeParameter(connection); |
| displaySize = new DisplaySizeParameter(connection); |
| deviceIdentifier = new DeviceIdentifierParameter(connection); |
| deviceSpeed = new DeviceSpeedParameter(connection); |
| deviceOnline = new DeviceOnlineParameter(connection); |
| retainDots = new RetainDotsParameter(connection); |
| computerBrailleCellSize = new ComputerBrailleCellSizeParameter(connection); |
| literaryBraille = new LiteraryBrailleParameter(connection); |
| cursorDots = new CursorDotsParameter(connection); |
| cursorBlinkPeriod = new CursorBlinkPeriodParameter(connection); |
| cursorBlinkPercentage = new CursorBlinkPercentageParameter(connection); |
| renderedCells = new RenderedCellsParameter(connection); |
| skipIdenticalLines = new SkipIdenticalLinesParameter(connection); |
| audibleAlerts = new AudibleAlertsParameter(connection); |
| clipboardContent = new ClipboardContentParameter(connection); |
| boundCommandKeycodes = new BoundCommandKeycodesParameter(connection); |
| commandKeycodeName = new CommandKeycodeNameParameter(connection); |
| commandKeycodeSummary = new CommandKeycodeSummaryParameter(connection); |
| definedDriverKeycodes = new DefinedDriverKeycodesParameter(connection); |
| driverKeycodeName = new DriverKeycodeNameParameter(connection); |
| driverKeycodeSummary = new DriverKeycodeSummaryParameter(connection); |
| computerBrailleRowsMask = new ComputerBrailleRowsMaskParameter(connection); |
| computerBrailleRowCells = new ComputerBrailleRowCellsParameter(connection); |
| computerBrailleTable = new ComputerBrailleTableParameter(connection); |
| literaryBrailleTable = new LiteraryBrailleTableParameter(connection); |
| messageLocale = new MessageLocaleParameter(connection); |
| } |
| |
| private final Parameter[] newParameterArray () { |
| Class<Parameters> type = Parameters.class; |
| |
| Field[] fields = type.getFields(); |
| int fieldCount = fields.length; |
| |
| Parameter[] parameters = new Parameter[fieldCount]; |
| int parameterCount = 0; |
| |
| for (Field field : fields) { |
| int modifiers = field.getModifiers(); |
| if ((modifiers & Modifier.PUBLIC) == 0) continue; |
| if ((modifiers & Modifier.FINAL) == 0) continue; |
| if (!type.equals(field.getDeclaringClass())) continue; |
| |
| try { |
| parameters[parameterCount] = (Parameter)field.get(this); |
| parameterCount += 1; |
| } catch (IllegalAccessException exception) { |
| continue; |
| } |
| } |
| |
| Parameter[] result = new Parameter[parameterCount]; |
| System.arraycopy(parameters, 0, result, 0, parameterCount); |
| return result; |
| } |
| |
| private Parameter[] parameterArray = null; |
| public final Parameter[] get () { |
| synchronized (this) { |
| if (parameterArray == null) { |
| parameterArray = newParameterArray(); |
| } |
| } |
| |
| int count = parameterArray.length; |
| Parameter[] result = new Parameter[count]; |
| System.arraycopy(parameterArray, 0, result, 0, count); |
| return result; |
| } |
| |
| private final KeywordMap<Parameter> newParameterNameMap () { |
| KeywordMap<Parameter> map = new KeywordMap<>(); |
| |
| for (Parameter parameter : get()) { |
| map.put(parameter.getName(), parameter); |
| } |
| |
| return map; |
| } |
| |
| private KeywordMap<Parameter> parameterNameMap = null; |
| public final Parameter get (String name) { |
| synchronized (this) { |
| if (parameterNameMap == null) { |
| parameterNameMap = newParameterNameMap(); |
| } |
| } |
| |
| return parameterNameMap.get(name); |
| } |
| |
| public static void sortByName (Parameter[] parameters) { |
| Arrays.sort(parameters, |
| (parameter1, parameter2) -> { |
| return parameter1.getName().compareTo(parameter2.getName()); |
| } |
| ); |
| } |
| } |