| /********************************************************************************
|
| * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
|
| *
|
| * See the NOTICE file(s) distributed with this work for additional
|
| * information regarding copyright ownership.
|
| *
|
| * This program and the accompanying materials are made available under the
|
| * terms of the Eclipse Public License v. 2.0 which is available at
|
| * http://www.eclipse.org/legal/epl-2.0.
|
| *
|
| * SPDX-License-Identifier: EPL-2.0
|
| *
|
| ********************************************************************************/
|
| |
| |
| package org.eclipse.mdm.openatfx.mdf.util; |
| |
| import java.text.DateFormat; |
| import java.text.ParseException; |
| import java.text.SimpleDateFormat; |
| import java.util.Date; |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| import org.asam.ods.NameValue; |
| import org.asam.ods.NameValueUnit; |
| import org.asam.ods.TS_Union; |
| import org.asam.ods.TS_Value; |
| import org.asam.ods.T_DCOMPLEX; |
| import org.asam.ods.T_ExternalReference; |
| import org.asam.ods.T_LONGLONG; |
| |
| /** |
| * Helper class with ODS specific functions. |
| * |
| * @author Christian Rechner |
| */ |
| public abstract class ODSHelper { |
| |
| // prepare dateformats to avoid instantiation a single object every time |
| // parsing a date. |
| private static Map<Integer, DateFormat> ODS_DATEFORMATS = new HashMap<Integer, DateFormat>(); |
| static { |
| ODS_DATEFORMATS.put(4, new SimpleDateFormat("yyyy")); |
| ODS_DATEFORMATS.put(6, new SimpleDateFormat("yyyyMM")); |
| ODS_DATEFORMATS.put(8, new SimpleDateFormat("yyyyMMdd")); |
| ODS_DATEFORMATS.put(10, new SimpleDateFormat("yyyyMMddHH")); |
| ODS_DATEFORMATS.put(12, new SimpleDateFormat("yyyyMMddHHmm")); |
| ODS_DATEFORMATS.put(14, new SimpleDateFormat("yyyyMMddHHmmss")); |
| ODS_DATEFORMATS.put(17, new SimpleDateFormat("yyyyMMddHHmmssSSS")); |
| } |
| |
| /** |
| * Return an ODS date from a <code>java.util.Date</code>. |
| * |
| * @param date |
| * the <code>java.util.Date</code> to convert |
| * @return the date in ODS date-format (YYYYMMDDhhmmss) |
| */ |
| public static synchronized String asODSDate(Date date) { |
| if (date == null) { |
| return ""; |
| } |
| return ODS_DATEFORMATS.get(14).format(date); |
| } |
| |
| /** |
| * Returns the java date from an ODS date. |
| * |
| * @param odsDate |
| * the ODS date string |
| * @return the java <code>java.util.Date</code> object, null if empty date |
| * @throws IllegalArgumentException |
| * unable to parse |
| */ |
| public static synchronized Date asJDate(String odsDate) { |
| try { |
| if (odsDate == null || odsDate.length() < 1) { |
| return null; |
| } |
| DateFormat format = ODS_DATEFORMATS.get(odsDate.length()); |
| if (format == null) { |
| throw new IllegalArgumentException("Invalid ODS date: " + odsDate); |
| } |
| return format.parse(odsDate); |
| } catch (ParseException e) { |
| throw new IllegalArgumentException("Invalid ODS date: " + odsDate); |
| } |
| } |
| |
| /** |
| * Returns a Java long from ODS T_LONGLONG. |
| * |
| * @param ll |
| * ODS T_LONGLONG value |
| * @return Java long with the same value as ll |
| */ |
| public static long asJLong(T_LONGLONG ll) { |
| long tmp; |
| if (ll.low >= 0) { |
| tmp = ll.high * 0x100000000L + ll.low; |
| } else { |
| tmp = (ll.high + 1) * 0x100000000L + ll.low; |
| } |
| return tmp; |
| } |
| |
| /** |
| * Returns an array of Java long from ODS T_LONGLONG. |
| * |
| * @param ll |
| * array of ODS T_LONGLONG values |
| * @return array of Java long values |
| */ |
| public static long[] asJLong(T_LONGLONG[] ll) { |
| long[] ar = new long[ll.length]; |
| for (int i = 0; i < ll.length; i++) { |
| ar[i] = asJLong(ll[i]); |
| } |
| return ar; |
| } |
| |
| /** |
| * Return ODS T_LONGLONG from Java long. |
| * |
| * @param v |
| * Java long value |
| * @return ODS T_LONGLONG with the same value as v |
| */ |
| public static T_LONGLONG asODSLongLong(long v) { |
| return new T_LONGLONG((int) (v >> 32 & 0xffffffffL), (int) (v & 0xffffffffL)); |
| } |
| |
| /** |
| * Returns an array of ODS T_LONGLONG from Java longs. |
| * |
| * @param v |
| * array of Java long values |
| * @return array of ODS T_LONGLONG values |
| */ |
| public static T_LONGLONG[] asODSLongLong(long[] v) { |
| T_LONGLONG[] ar = new T_LONGLONG[v.length]; |
| for (int i = 0; i < v.length; i++) { |
| ar[i] = asODSLongLong(v[i]); |
| } |
| return ar; |
| } |
| |
| public static String getCurrentODSDate() { |
| return asODSDate(new Date()); |
| } |
| |
| private static NameValue createNV(String valName, TS_Union union) { |
| NameValue nv = new NameValue(); |
| nv.valName = valName; |
| nv.value = new TS_Value(); |
| nv.value.flag = 15; |
| nv.value.u = union; |
| return nv; |
| } |
| |
| private static NameValueUnit createNVU(String attrName, TS_Union union) { |
| NameValueUnit nvu = new NameValueUnit(); |
| nvu.valName = attrName; |
| nvu.value = new TS_Value(); |
| nvu.unit = ""; |
| nvu.value.flag = 15; |
| nvu.value.u = union; |
| return nvu; |
| } |
| |
| private static NameValueUnit createNVU(String attrName, TS_Union union, String unit) { |
| NameValueUnit nvu = new NameValueUnit(); |
| nvu.valName = attrName; |
| nvu.value = new TS_Value(); |
| nvu.value.u = new TS_Union(); |
| nvu.unit = unit; |
| nvu.value.flag = 15; |
| nvu.value.u = union; |
| return nvu; |
| } |
| |
| public static NameValueUnit createCurrentDateNVU(String attrName) { |
| TS_Union union = new TS_Union(); |
| union.dateVal(getCurrentODSDate()); |
| return createNVU(attrName, union); |
| } |
| |
| public static NameValue createStringNV(String valName, String value) { |
| NameValue nv = new NameValue(); |
| nv.valName = valName; |
| nv.value = new TS_Value(); |
| nv.value.u = new TS_Union(); |
| if (value == null) { |
| nv.value.flag = 0; |
| nv.value.u.stringVal(""); |
| } else { |
| nv.value.flag = 15; |
| nv.value.u.stringVal(value); |
| } |
| return nv; |
| } |
| |
| public static NameValueUnit createStringNVU(String valName, String value) { |
| NameValueUnit nvu = new NameValueUnit(); |
| nvu.valName = valName; |
| nvu.value = new TS_Value(); |
| nvu.unit = ""; |
| nvu.value.u = new TS_Union(); |
| if (value == null || value.length() < 1) { |
| nvu.value.flag = 0; |
| nvu.value.u.stringVal(""); |
| } else { |
| nvu.value.flag = 15; |
| nvu.value.u.stringVal(value); |
| } |
| return nvu; |
| } |
| |
| public static NameValue createShortNV(String valName, short value) { |
| TS_Union union = new TS_Union(); |
| union.shortVal(value); |
| return createNV(valName, union); |
| } |
| |
| public static NameValueUnit createShortNVU(String valName, short value) { |
| TS_Union union = new TS_Union(); |
| union.shortVal(value); |
| return createNVU(valName, union); |
| } |
| |
| public static NameValueUnit createShortNVU(String valName, short value, String unit) { |
| TS_Union union = new TS_Union(); |
| union.shortVal(value); |
| return createNVU(valName, union, unit); |
| } |
| |
| public static NameValue createFloatNV(String valName, float value) { |
| TS_Union union = new TS_Union(); |
| union.floatVal(value); |
| return createNV(valName, union); |
| } |
| |
| public static NameValueUnit createFloatNVU(String valName, float value) { |
| TS_Union union = new TS_Union(); |
| union.floatVal(value); |
| return createNVU(valName, union); |
| } |
| |
| public static NameValueUnit createFloatNVU(String valName, float value, String unit) { |
| TS_Union union = new TS_Union(); |
| union.floatVal(value); |
| return createNVU(valName, union, unit); |
| } |
| |
| public static NameValue createBooleanNV(String valName, boolean value) { |
| TS_Union union = new TS_Union(); |
| union.booleanVal(value); |
| return createNV(valName, union); |
| } |
| |
| public static NameValueUnit createBooleanNVU(String valName, boolean value) { |
| TS_Union union = new TS_Union(); |
| union.booleanVal(value); |
| return createNVU(valName, union); |
| } |
| |
| public static NameValue createByteNV(String valName, byte value) { |
| TS_Union union = new TS_Union(); |
| union.byteVal(value); |
| return createNV(valName, union); |
| } |
| |
| public static NameValueUnit createByteNVU(String valName, byte value) { |
| TS_Union union = new TS_Union(); |
| union.byteVal(value); |
| return createNVU(valName, union); |
| } |
| |
| public static NameValue createBytestrNV(String valName, byte value[]) { |
| TS_Union union = new TS_Union(); |
| union.bytestrVal(value); |
| return createNV(valName, union); |
| } |
| |
| public static NameValueUnit createBytestrNVU(String valName, byte value[]) { |
| TS_Union union = new TS_Union(); |
| union.bytestrVal(value); |
| return createNVU(valName, union); |
| } |
| |
| public static NameValue createDoubleNV(String valName, double value) { |
| TS_Union union = new TS_Union(); |
| union.doubleVal(value); |
| return createNV(valName, union); |
| } |
| |
| public static NameValueUnit createDoubleNVU(String valName, Double value) { |
| NameValueUnit nvu = new NameValueUnit(); |
| nvu.valName = valName; |
| nvu.value = new TS_Value(); |
| nvu.unit = ""; |
| nvu.value.u = new TS_Union(); |
| if (value == null) { |
| nvu.value.flag = 0; |
| nvu.value.u.doubleVal(0); |
| } else { |
| nvu.value.flag = 15; |
| nvu.value.u.doubleVal(value); |
| } |
| return nvu; |
| } |
| |
| public static NameValue createDComplexNV(String valName, T_DCOMPLEX value) { |
| TS_Union union = new TS_Union(); |
| union.dcomplexVal(value); |
| return createNV(valName, union); |
| } |
| |
| public static NameValueUnit createDComplexNVU(String valName, T_DCOMPLEX value) { |
| TS_Union union = new TS_Union(); |
| union.dcomplexVal(value); |
| return createNVU(valName, union); |
| } |
| |
| public static NameValueUnit createDoubleNVU(String valName, double value, String unit) { |
| TS_Union union = new TS_Union(); |
| union.doubleVal(value); |
| return createNVU(valName, union, unit); |
| } |
| |
| public static NameValue createLongNV(String valName, int value) { |
| TS_Union union = new TS_Union(); |
| union.longVal(value); |
| return createNV(valName, union); |
| } |
| |
| public static NameValueUnit createLongNVU(String valName, int value) { |
| TS_Union union = new TS_Union(); |
| union.longVal(value); |
| return createNVU(valName, union); |
| } |
| |
| public static NameValueUnit createLongNVU(String valName, int value, String unit) { |
| TS_Union union = new TS_Union(); |
| union.longVal(value); |
| return createNVU(valName, union, unit); |
| } |
| |
| public static NameValue createLongLongNV(String valName, T_LONGLONG value) { |
| TS_Union union = new TS_Union(); |
| union.longlongVal(value); |
| return createNV(valName, union); |
| } |
| |
| public static NameValue createLongLongNV(String valName, long value) { |
| return createLongLongNV(valName, asODSLongLong(value)); |
| } |
| |
| public static NameValueUnit createLongLongNVU(String valName, long value) { |
| TS_Union union = new TS_Union(); |
| union.longlongVal(asODSLongLong(value)); |
| return createNVU(valName, union); |
| } |
| |
| public static NameValueUnit createLongLongNVU(String valName, long value, String unit) { |
| TS_Union union = new TS_Union(); |
| union.longlongVal(asODSLongLong(value)); |
| return createNVU(valName, union, unit); |
| } |
| |
| public static NameValue createDateNV(String valName, String value) { |
| NameValue nv = new NameValue(); |
| nv.valName = valName; |
| nv.value = new TS_Value(); |
| nv.value.u = new TS_Union(); |
| if (value == null || value.length() < 1) { |
| nv.value.flag = 0; |
| nv.value.u.dateVal(""); |
| } else { |
| nv.value.flag = 15; |
| nv.value.u.dateVal(value); |
| } |
| return nv; |
| } |
| |
| public static NameValue createDateNV(String valName, Date value) { |
| return createDateNV(valName, asODSDate(value)); |
| } |
| |
| public static NameValueUnit createDateNVU(String valName, String value) { |
| NameValueUnit nvu = new NameValueUnit(); |
| nvu.valName = valName; |
| nvu.value = new TS_Value(); |
| nvu.unit = ""; |
| nvu.value.u = new TS_Union(); |
| if (value == null || value.length() < 1) { |
| nvu.value.flag = 0; |
| nvu.value.u.dateVal(""); |
| } else { |
| nvu.value.flag = 15; |
| nvu.value.u.dateVal(value); |
| } |
| return nvu; |
| } |
| |
| public static NameValueUnit createDateNVU(String valName, Date value) { |
| return createDateNVU(valName, asODSDate(value)); |
| } |
| |
| public static NameValue createEnumNV(String valName, int value) { |
| TS_Union union = new TS_Union(); |
| union.enumVal(value); |
| return createNV(valName, union); |
| } |
| |
| public static NameValueUnit createEnumNVU(String valName, int value) { |
| TS_Union union = new TS_Union(); |
| union.enumVal(value); |
| return createNVU(valName, union); |
| } |
| |
| public static NameValue createExtRefNV(String valName, T_ExternalReference value) { |
| TS_Union union = new TS_Union(); |
| union.extRefVal(value); |
| return createNV(valName, union); |
| } |
| |
| public static NameValueUnit createExtRefNVU(String valName, T_ExternalReference value) { |
| TS_Union union = new TS_Union(); |
| union.extRefVal(value); |
| return createNVU(valName, union); |
| } |
| |
| public static NameValue createStringSeqNV(String valName, String values[]) { |
| TS_Union union = new TS_Union(); |
| union.stringSeq(values); |
| return createNV(valName, union); |
| } |
| |
| public static NameValueUnit createStringSeqNVU(String valName, String values[]) { |
| TS_Union union = new TS_Union(); |
| union.stringSeq(values); |
| return createNVU(valName, union); |
| } |
| |
| public static NameValue createShortSeqNV(String valName, short values[]) { |
| TS_Union union = new TS_Union(); |
| union.shortSeq(values); |
| return createNV(valName, union); |
| } |
| |
| public static NameValueUnit createShortSeqNVU(String attrName, short values[]) { |
| TS_Union union = new TS_Union(); |
| union.shortSeq(values); |
| return createNVU(attrName, union); |
| } |
| |
| public static NameValue createFloatSeqNV(String attrName, float values[]) { |
| TS_Union union = new TS_Union(); |
| union.floatSeq(values); |
| return createNV(attrName, union); |
| } |
| |
| public static NameValueUnit createFloatSeqNVU(String attrName, float values[]) { |
| TS_Union union = new TS_Union(); |
| union.floatSeq(values); |
| return createNVU(attrName, union); |
| } |
| |
| public static NameValue createBooleanSeqNV(String attrName, boolean values[]) { |
| TS_Union union = new TS_Union(); |
| union.booleanSeq(values); |
| return createNV(attrName, union); |
| } |
| |
| public static NameValueUnit createBooleanSeqNVU(String attrName, boolean values[]) { |
| TS_Union union = new TS_Union(); |
| union.booleanSeq(values); |
| return createNVU(attrName, union); |
| } |
| |
| public static NameValue createByteSeqNV(String attrName, byte values[]) { |
| TS_Union union = new TS_Union(); |
| union.byteSeq(values); |
| return createNV(attrName, union); |
| } |
| |
| public static NameValueUnit createByteSeqNVU(String attrName, byte values[]) { |
| TS_Union union = new TS_Union(); |
| union.byteSeq(values); |
| return createNVU(attrName, union); |
| } |
| |
| public static NameValue createBytestrSeqNV(String valName, byte value[][]) { |
| TS_Union union = new TS_Union(); |
| union.bytestrSeq(value); |
| return createNV(valName, union); |
| } |
| |
| public static NameValueUnit createBytestrSeqNVU(String valName, byte value[][]) { |
| TS_Union union = new TS_Union(); |
| union.bytestrSeq(value); |
| return createNVU(valName, union); |
| } |
| |
| public static NameValue createDComplexSeqNV(String valName, T_DCOMPLEX value[]) { |
| TS_Union union = new TS_Union(); |
| union.dcomplexSeq(value); |
| return createNV(valName, union); |
| } |
| |
| public static NameValueUnit createDComplexSeqNVU(String valName, T_DCOMPLEX value[]) { |
| TS_Union union = new TS_Union(); |
| union.dcomplexSeq(value); |
| return createNVU(valName, union); |
| } |
| |
| public static NameValue createDoubleSeqNV(String attrName, double values[]) { |
| TS_Union union = new TS_Union(); |
| union.doubleSeq(values); |
| return createNV(attrName, union); |
| } |
| |
| public static NameValueUnit createDoubleSeqNVU(String attrName, double values[]) { |
| TS_Union union = new TS_Union(); |
| union.doubleSeq(values); |
| return createNVU(attrName, union); |
| } |
| |
| public static NameValue createEnumSeqNV(String valName, int value[]) { |
| TS_Union union = new TS_Union(); |
| union.enumSeq(value); |
| return createNV(valName, union); |
| } |
| |
| public static NameValueUnit createEnumSeqNVU(String valName, int value[]) { |
| TS_Union union = new TS_Union(); |
| union.enumSeq(value); |
| return createNVU(valName, union); |
| } |
| |
| public static NameValue createLongSeqNV(String attrName, int values[]) { |
| TS_Union union = new TS_Union(); |
| union.longSeq(values); |
| return createNV(attrName, union); |
| } |
| |
| public static NameValueUnit createLongSeqNVU(String attrName, int values[]) { |
| TS_Union union = new TS_Union(); |
| union.longSeq(values); |
| return createNVU(attrName, union); |
| } |
| |
| public static NameValue createLongLongSeqNV(String attrName, T_LONGLONG values[]) { |
| TS_Union union = new TS_Union(); |
| union.longlongSeq(values); |
| return createNV(attrName, union); |
| } |
| |
| public static NameValue createLongLongSeqNV(String attrName, long values[]) { |
| TS_Union union = new TS_Union(); |
| union.longlongSeq(asODSLongLong(values)); |
| return createNV(attrName, union); |
| } |
| |
| public static NameValueUnit createLongLongSeqNVU(String attrName, long values[]) { |
| TS_Union union = new TS_Union(); |
| union.longlongSeq(asODSLongLong(values)); |
| return createNVU(attrName, union); |
| } |
| |
| public static NameValue createDateSeqNV(String attrName, String values[]) { |
| TS_Union union = new TS_Union(); |
| union.dateSeq(values); |
| return createNV(attrName, union); |
| } |
| |
| public static NameValue createDateSeqNV(String attrName, Date values[]) { |
| String[] valuesstr = new String[values.length]; |
| for (int i = 0; i < values.length; i++) { |
| valuesstr[i] = ODSHelper.asODSDate(values[i]); |
| } |
| return createDateSeqNV(attrName, valuesstr); |
| } |
| |
| public static NameValueUnit createDateSeqNVU(String attrName, String values[]) { |
| TS_Union union = new TS_Union(); |
| union.dateSeq(values); |
| return createNVU(attrName, union); |
| } |
| |
| public static NameValue createExtRefSeqNV(String attrName, T_ExternalReference values[]) { |
| TS_Union union = new TS_Union(); |
| union.extRefSeq(values); |
| return createNV(attrName, union); |
| } |
| |
| public static NameValueUnit createExtRefSeqNVU(String attrName, T_ExternalReference values[]) { |
| TS_Union union = new TS_Union(); |
| union.extRefSeq(values); |
| return createNVU(attrName, union); |
| } |
| |
| public static boolean isNullVal(TS_Value value) { |
| if (value.flag != 15) { |
| return true; |
| } |
| return false; |
| } |
| |
| public static boolean isNullVal(NameValueUnit nvu) { |
| if (nvu.value.flag != 15) { |
| return true; |
| } |
| return false; |
| } |
| |
| public static long getLongLongVal(NameValueUnit nvu) { |
| if (isNullVal(nvu)) { |
| return 0; |
| } else { |
| return asJLong(nvu.value.u.longlongVal()); |
| } |
| } |
| |
| public static int getLongVal(NameValueUnit nvu) { |
| if (isNullVal(nvu)) { |
| return 0; |
| } else { |
| return nvu.value.u.longVal(); |
| } |
| } |
| |
| public static double getDoubleVal(NameValueUnit nvu) { |
| if (isNullVal(nvu)) { |
| return 0d; |
| } else { |
| return nvu.value.u.doubleVal(); |
| } |
| } |
| |
| public static short getShortVal(NameValueUnit nvu) { |
| if (isNullVal(nvu)) { |
| return (short) 0; |
| } else { |
| return nvu.value.u.shortVal(); |
| } |
| } |
| |
| public static byte getByteVal(NameValueUnit nvu) { |
| if (isNullVal(nvu)) { |
| return (byte) 0; |
| } else { |
| return nvu.value.u.byteVal(); |
| } |
| } |
| |
| public static float getFloatVal(NameValueUnit nvu) { |
| if (isNullVal(nvu)) { |
| return 0f; |
| } else { |
| return nvu.value.u.floatVal(); |
| } |
| } |
| |
| public static String getStringVal(NameValueUnit nvu) { |
| if (isNullVal(nvu)) { |
| return ""; |
| } else { |
| return nvu.value.u.stringVal(); |
| } |
| } |
| |
| public static int getEnumVal(NameValueUnit nvu) { |
| if (isNullVal(nvu)) { |
| return 0; |
| } else { |
| return nvu.value.u.enumVal(); |
| } |
| } |
| |
| public static String getDateVal(NameValueUnit nvu) { |
| if (isNullVal(nvu)) { |
| return ""; |
| } else { |
| return nvu.value.u.dateVal(); |
| } |
| } |
| |
| public static boolean getBooleanVal(NameValueUnit nvu) { |
| if (isNullVal(nvu)) { |
| return false; |
| } else { |
| return nvu.value.u.booleanVal(); |
| } |
| } |
| |
| public static String[] getStringSeq(NameValueUnit nvu) { |
| if (isNullVal(nvu)) { |
| return new String[0]; |
| } else { |
| return nvu.value.u.stringSeq(); |
| } |
| } |
| |
| public static short[] getShortSeq(NameValueUnit nvu) { |
| if (isNullVal(nvu)) { |
| return new short[0]; |
| } else { |
| return nvu.value.u.shortSeq(); |
| } |
| } |
| |
| public static float[] getFloatSeq(NameValueUnit nvu) { |
| if (isNullVal(nvu)) { |
| return new float[0]; |
| } else { |
| return nvu.value.u.floatSeq(); |
| } |
| } |
| |
| public static boolean[] getBooleanSeq(NameValueUnit nvu) { |
| if (isNullVal(nvu)) { |
| return new boolean[0]; |
| } else { |
| return nvu.value.u.booleanSeq(); |
| } |
| } |
| |
| public static byte[] getByteSeq(NameValueUnit nvu) { |
| if (isNullVal(nvu)) { |
| return new byte[0]; |
| } else { |
| return nvu.value.u.byteSeq(); |
| } |
| } |
| |
| public static int[] getLongSeq(NameValueUnit nvu) { |
| if (isNullVal(nvu)) { |
| return new int[0]; |
| } else { |
| return nvu.value.u.longSeq(); |
| } |
| } |
| |
| public static double[] getDoubleSeq(NameValueUnit nvu) { |
| if (isNullVal(nvu)) { |
| return new double[0]; |
| } else { |
| return nvu.value.u.doubleSeq(); |
| } |
| } |
| |
| public static long[] getLongLongSeq(NameValueUnit nvu) { |
| if (isNullVal(nvu)) { |
| return new long[0]; |
| } else { |
| return asJLong(nvu.value.u.longlongSeq()); |
| } |
| } |
| |
| public static String[] getDateSeq(NameValueUnit nvu) { |
| if (isNullVal(nvu)) { |
| return new String[0]; |
| } else { |
| return nvu.value.u.stringSeq(); |
| } |
| } |
| |
| public static void setBit(byte[] data, int pos, boolean val) { |
| int posByte = pos / 8; |
| int posBit = pos % 8; |
| byte oldByte = data[posByte]; |
| if (val) { |
| data[posByte] = (byte) (oldByte | 1 << 7 - posBit); |
| } else { |
| data[posByte] = (byte) (oldByte | 0 << 7 - posBit); |
| } |
| } |
| |
| } |