001 /* 002 * Cumulus4j - Securing your data in the cloud - http://cumulus4j.org 003 * Copyright (C) 2011 NightLabs Consulting GmbH 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 package org.cumulus4j.keystore.prop; 019 020 /** 021 * {@link Property} implementation for the value type {@link Long}. 022 * 023 * @author Marco หงุ่ยตระกูล-Schulze - marco at nightlabs dot de 024 */ 025 public class LongProperty extends Property<Long> 026 { 027 /** 028 * {@inheritDoc} 029 * <p> 030 * The implementation in <code>LongProperty</code> returns either <code>null</code> or 8 bytes containing 031 * the long value in a pretty raw form (copied byte-by-byte). 032 * </p> 033 */ 034 @Override 035 public byte[] getValueEncoded() 036 { 037 Long value = getValue(); 038 if (value == null) 039 return null; 040 else { 041 long val = value; 042 byte[] result = new byte[8]; 043 for (int i = 0; i < result.length; ++ i) 044 result[i] = (byte)(val >>> (i * 8)); 045 046 return result; 047 } 048 } 049 050 /** 051 * {@inheritDoc} 052 * @throws IllegalArgumentException if the <code>encodedValue</code> is neither <code>null</code> nor a byte-array 053 * with a length of exactly 8. 054 */ 055 @Override 056 public void setValueEncoded(byte[] encodedValue) 057 throws IllegalArgumentException 058 { 059 if (encodedValue == null) 060 setValue(null); 061 else { 062 if (encodedValue.length != 8) 063 throw new IllegalArgumentException("encodedValue.length != 8 :: encodedValue must either be null or an array with the correct length!"); 064 065 long val = 0; 066 for (int i = 0; i < encodedValue.length; ++ i) 067 val |= ((long)encodedValue[i] & 0xff) << (i * 8); 068 069 setValue(val); 070 } 071 } 072 073 }