package com.digiarea.closure.model; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javafx.beans.property.ListProperty; import javafx.beans.property.SimpleListProperty; import javafx.collections.FXCollections; import com.digiarea.closure.model.visitor.GenericVisitor; import com.digiarea.closure.model.visitor.VoidVisitor; import com.digiarea.zippy.ZippyBuffer; public class GssNonStandardFunctions extends Node { private ListProperty<GssNonStandardFunction> gssNonStandardFunction = new SimpleListProperty<GssNonStandardFunction>(this, "gssNonStandardFunction", FXCollections.observableList(new ArrayList<GssNonStandardFunction>())); public boolean addGssNonStandardFunction(GssNonStandardFunction gssNonStandardFunction) { boolean res = getGssNonStandardFunction().add(gssNonStandardFunction); if (res) { if (gssNonStandardFunction != null) { gssNonStandardFunction.parent = this; } } return res; } public boolean removeGssNonStandardFunction(GssNonStandardFunction gssNonStandardFunction) { boolean res = getGssNonStandardFunction().remove(gssNonStandardFunction); if (res) { if (gssNonStandardFunction != null) { gssNonStandardFunction.parent = this; } } return res; } public final List<GssNonStandardFunction> getGssNonStandardFunction() { return gssNonStandardFunction.get(); } public final void setGssNonStandardFunction(List<GssNonStandardFunction> gssNonStandardFunction) { if (gssNonStandardFunction != null) { for (GssNonStandardFunction item : gssNonStandardFunction) { item.parent = this; } } this.gssNonStandardFunction.addAll(gssNonStandardFunction); } public GssNonStandardFunctions() { super(); } public GssNonStandardFunctions(List<GssNonStandardFunction> gssNonStandardFunction) { super(); this.gssNonStandardFunction.addAll(gssNonStandardFunction); } public ListProperty<GssNonStandardFunction> gssNonStandardFunctionProperty() { return gssNonStandardFunction; } @Override public <C> void accept(VoidVisitor<C> v, C ctx) throws Exception { v.visit(this, ctx); } @Override public <R, C> R accept(GenericVisitor<R, C> v, C ctx) throws Exception { return v.visit(this, ctx); } public final int sizeOfGssNonStandardFunctions(final boolean isExternal) { int size = isExternal ? 1 : 0; if (this.getGssNonStandardFunction() != null) { size += 1; final List<GssNonStandardFunction> gssNonStandardFunction = this.getGssNonStandardFunction(); size += ZippyBuffer.sizeOfRawVarInt(gssNonStandardFunction.size()); for (GssNonStandardFunction entry : gssNonStandardFunction) { if (entry != null) { size += entry.sizeOfGssNonStandardFunction(false); } else { size += 1; } } } size += 1; return size; } public final void writeGssNonStandardFunctions(final ZippyBuffer writer, final boolean isExternal) throws IOException { if (isExternal) { writer.writeRawVarInt(20); } if (this.getGssNonStandardFunction() != null) { writer.writeRawVarInt(1); final List<GssNonStandardFunction> gssNonStandardFunction = this.getGssNonStandardFunction(); writer.writeRawVarInt(gssNonStandardFunction.size()); for (GssNonStandardFunction entry : gssNonStandardFunction) { if (entry != null) { entry.writeGssNonStandardFunction(writer, false); } else { writer.writeRawVarInt(0); } } } writer.writeRawVarInt(0); } public static GssNonStandardFunctions readGssNonStandardFunctions(final ZippyBuffer reader) throws IOException { final GssNonStandardFunctions packet = new GssNonStandardFunctions(); int sector; while ((sector = reader.readSector()) != 0) { switch(sector) { case 1: int gssNonStandardFunctionI = reader.readRawVarInt(); final List<GssNonStandardFunction> gssNonStandardFunction = new ArrayList<GssNonStandardFunction>(gssNonStandardFunctionI); for (int i = 0; i < gssNonStandardFunctionI; i++) { gssNonStandardFunction.add(GssNonStandardFunction.readGssNonStandardFunction(reader)); } packet.setGssNonStandardFunction(gssNonStandardFunction); break; } } return packet; } }