package org.bouncycastle.kmip.wire;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
public class KMIPStructure
implements KMIPItem
{
private final int tag;
private final KMIPItem[] items;
public KMIPStructure(int tag, KMIPItem item)
{
this.tag = tag;
this.items = new KMIPItem[] { item };
}
public KMIPStructure(int tag, KMIPItem[] items)
{
this.tag = tag;
this.items = new KMIPItem[items.length];
System.arraycopy(items, 0, this.items, 0, items.length);
}
public KMIPStructure(int tag, List<KMIPItem> items)
{
this.tag = tag;
this.items = (KMIPItem[])items.toArray(new KMIPItem[items.size()]);
}
public int getTag()
{
return tag;
}
public byte getType()
{
return KMIPType.STRUCTURE;
}
public long getLength()
{
long totalLength = 0;
for (int i = 0; i != items.length; i++)
{
KMIPItem item = items[i];
long length = item.getLength();
totalLength += 8; // the header
// the body
if (length <= 8)
{
totalLength += 8;
}
else
{
if (length % 8 == 0)
{
totalLength += length;
}
else
{
totalLength += ((length / 8) + 1) * 8;
}
}
}
return totalLength;
}
public List<KMIPItem> getValue()
{
return Collections.unmodifiableList(Arrays.asList(items));
}
public KMIPItem toKMIPItem()
{
return this;
}
}