001/* 002 * jPOS Project [http://jpos.org] 003 * Copyright (C) 2000-2026 jPOS Software SRL 004 * 005 * This program is free software: you can redistribute it and/or modify 006 * it under the terms of the GNU Affero General Public License as 007 * published by the Free Software Foundation, either version 3 of the 008 * License, or (at your option) any later version. 009 * 010 * This program is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 013 * GNU Affero General Public License for more details. 014 * 015 * You should have received a copy of the GNU Affero General Public License 016 * along with this program. If not, see <http://www.gnu.org/licenses/>. 017 */ 018 019package org.jpos.iso; 020 021@SuppressWarnings("unused") 022public abstract class PosFlags { 023 024 public interface Flag { 025 int getOffset(); 026 int intValue(); 027 } 028 029 /** 030 * Sets or unsets a set of flags according to value 031 * @param value if true flags are set, else unset 032 * @param flags flag set to set or unset 033 */ 034 protected void setFlags(boolean value, Flag... flags) { 035 byte[] b = getBytes(); 036 if (value) { 037 for (Flag flag : flags) { 038 for (int v = flag.intValue(), offset = flag.getOffset(); v != 0; v >>>= 8, offset++) { 039 if (offset < b.length) 040 b[offset] |= (byte) v; 041 } 042 } 043 } else { 044 for (Flag flag : flags) { 045 for (int v = flag.intValue(), offset = flag.getOffset(); v != 0; v >>>= 8, offset++) { 046 if (offset < b.length) 047 b[offset] &= (byte) ~v; 048 } 049 } 050 } 051 } 052 public abstract byte[] getBytes(); 053 054 public String toString() { 055 return super.toString() + "[" + ISOUtil.hexString (getBytes())+ "]"; 056 } 057}