private List generateHoldings(Record storageRecord) { List result = new ArrayList(); EntityObject wd = dataEntryService.findDefaultHoldingWorksheetFast(storageRecord); List holdDataFields = MarcUtils.getVaribleFieldList(storageRecord, "999"); for (int i = 0; i < holdDataFields.size(); i++) { DataField hold = (DataField) holdDataFields.get(i); String locCode = MarcUtils.getSubfieldData(hold, 's', 0); locCode = StringUtils.extendedArabicToLatinDigit(locCode); ConstantTableItem location = findOrCreateLocationByCode(locCode); if (location == null) { continue; } String regNo = MarcUtils.getSubfieldData(hold, 'r', 0); if (regNo == null || regNo.length() == 0) { continue; } String vol = MarcUtils.getSubfieldData(hold, 'v', 0); String copy = MarcUtils.getSubfieldData(hold, 'c', 0); String part = MarcUtils.getSubfieldData(hold, 'p', 0); Record marc = dataEntryService.createPreparedRegisterRecordFast( Register.class, storageRecord, location, AppSession.getInstance().getCurrentUser()); DataField df = ensureFieldExists(marc, Tags.HOL_LOC_CALL_NO); MarcUtils.setSubfieldData(df, 'b', locCode); MarcUtils.setSubfieldData(df, 'm', regNo); df = (DataField) ensureFieldExists(marc, Tags.HOL_COPY_VOL_INFO); MarcUtils.setSubfieldData(df, 'a', vol); MarcUtils.setSubfieldData(df, 'b', copy); MarcUtils.setSubfieldData(df, 'c', part); Register reg = new Register(); reg.setRegNo(regNo); reg.setVolume(vol); reg.setCopy(copy); reg.setLocation(location); if (wd != null) reg.setWorksheetDefinitionId(wd.getId()); reg.setContent(MarcUtils.marshalContent(marc)); // reg.setBibliographicRecord(storageRecord); // storageRecord.getRegisters().add(reg); result.add(reg); storageRecord.getDataFieldList().remove(hold); } return result; // remove 999 fields // for (Iterator iter = storageRecord.getDataFieldList().iterator(); iter.hasNext();) { // DataField element = (DataField) iter.next(); // if ("999".equals(element.getTag())) // iter.remove(); // } }