/* (non-Javadoc) * @see uk.ac.ucl.excites.sapelli.collector.db.ProjectStore#deserialise(java.io.InputStream) */ @Override public Project deserialise(InputStream in) throws IOException { // Deserialise valueSet: BitInputStream bitsIn = new BitWrapInputStream(in); ValueSet<ColumnSet> serialisedProjectVS = new ValueSet<ColumnSet>(PROJECT_SERIALISIATION_CS); serialisedProjectVS.readFromBitStream(bitsIn, true); bitsIn.close(); // Retrieve FSI records: List<byte[]> fsiRecordBytesList = PROJECT_SERIALISIATION_FSI_RECORDS_COLUMN.retrieveValue(serialisedProjectVS); final List<Record> fsiRecords = new ArrayList<Record>(fsiRecordBytesList.size()); for (byte[] fsiRecordBytes : fsiRecordBytesList) fsiRecords.add(FSI_SCHEMA.createRecord(fsiRecordBytes, true)); // Retrieve & parse Project XML: return ProjectLoader.ParseProjectXML( new ByteArrayInputStream( PROJECT_SERIALISIATION_XML_COLUMN.retrieveValue(serialisedProjectVS)), new FormSchemaInfoProvider() { @Override public List<String> getByPassableFieldIDs(Form form) { for (Record fsiRecord : fsiRecords) if (FSI_FORM_POSITION_COLUMN.retrieveValue(fsiRecord).shortValue() == form.getPosition()) return ProjectRecordStore.this.getByPassableFieldIDs(fsiRecord); return null; } }); }