/******************************************************************************* * ============LICENSE_START==================================================== * * org.onap.aaf * * =========================================================================== * * Copyright © 2017 AT&T Intellectual Property. All rights reserved. * * =========================================================================== * * Licensed under the Apache License, Version 2.0 (the "License"); * * you may not use this file except in compliance with the License. * * You may obtain a copy of the License at * * * * http://www.apache.org/licenses/LICENSE-2.0 * * * * Unless required by applicable law or agreed to in writing, software * * distributed under the License is distributed on an "AS IS" BASIS, * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * * See the License for the specific language governing permissions and * * limitations under the License. * * ============LICENSE_END==================================================== * * * * ECOMP is a trademark and service mark of AT&T Intellectual Property. * * ******************************************************************************/ package org.onap.aaf.rosetta.marshal; import java.util.Iterator; import java.util.List; import org.onap.aaf.rosetta.Ladder; import org.onap.aaf.rosetta.Marshal; import org.onap.aaf.rosetta.ParseException; import org.onap.aaf.rosetta.Parsed; public abstract class FieldArray extends Marshal { private DataWriter dataWriter; private String name; public FieldArray(String name, DataWriter dw) { this.name = name; dataWriter = dw; } @SuppressWarnings("unchecked") @Override public Parsed parse(T t, Parsed parsed) throws ParseException { Ladder> ladder = parsed.state.ladder; Iterator iter = ladder.peek(); if(iter==null) { List list = data(t); if(list.isEmpty() && parsed.state.smallest) { ladder.push(DONE_ITERATOR); } else { ladder.push(new ListIterator(list)); parsed.event = START_ARRAY; parsed.name = name; } } else if (DONE_ITERATOR.equals(iter)) { } else { ladder.ascend(); // look at field info Iterator memIter = ladder.peek(); ListIterator mems = (ListIterator)iter; S mem; if(memIter==null) { mem=mems.next(); } else if(!DONE_ITERATOR.equals(memIter)) { mem=mems.peek(); } else if(iter.hasNext()) { mem=null; ladder.push(null); } else { mem=null; } if(mem!=null) { parsed.isString=dataWriter.write(mem, parsed.sb); parsed.event = NEXT; } ladder.descend(); if(mem==null) { if(iter.hasNext()) { parsed.event = NEXT; } else { parsed.event = END_ARRAY; ladder.push(DONE_ITERATOR); } } } return parsed; // if unchanged, then it will end process } protected abstract List data(T t); }