}
}
}
private Piece savePiece(ScoreContext ctx, byte[] mp3, byte[] midi) {
Piece piece = new Piece();
piece.setNewlyCreated(true);
piece.setGenerationTime(new DateTime());
piece.setTitle(ctx.getScore().getTitle());
piece.setKeyNote(ctx.getKeyNote());
piece.setMeasures(ctx.getMeasures());
piece.setNormalizedMeasureSize(ctx.getNormalizedMeasureSize());
piece.setTempo((int) ctx.getScore().getTempo());
piece.setNoteLengthCoefficient(ctx.getNoteLengthCoefficient());
piece.setScale(ctx.getScale());
piece.setAlternativeScale(ctx.getAlternativeScale());
piece.setUpBeatLength(ctx.getUpBeatLength());
piece.setMetreNumerator(ctx.getMetre()[0]);
piece.setMetreDenominator(ctx.getMetre()[1]);
piece.setMainInstrument(ctx.getParts().get(PartType.MAIN).getInstrument());
piece.setVariation(ctx.getVariation());
piece.setParts(joiner.join(ctx.getParts().keySet()));
piece.setAlgorithmVersion(algorithmVersion);
piece.getIntermediateDecisions().setDullBass(ctx.isDullBass());
piece.getIntermediateDecisions().setFourToTheFloor(ctx.isFourToTheFloor());
piece.getIntermediateDecisions().setSimplePhrases(ctx.isSimplePhrases());
piece.getIntermediateDecisions().setAccompaniment(ctx.getParts().containsKey(PartType.ACCOMPANIMENT));
piece.getIntermediateDecisions().setDrums(ctx.getParts().containsKey(PartType.PERCUSSIONS));
piece.getIntermediateDecisions().setClassical(
ctx.getParts().get(PartType.MAIN).getInstrument() == Instruments.PIANO
&& piece.getIntermediateDecisions().isAccompaniment());
piece.getIntermediateDecisions().setTempoType(Tempo.forValue(piece.getTempo()));
piece.getIntermediateDecisions().setElectronic(ctx.isElectronic());
piece.getIntermediateDecisions().setDissonant(ctx.isDissonant());
piece.getIntermediateDecisions().setOrnamented(ctx.isOrnamented());
piece.getIntermediateDecisions().setVariations(StringUtils.left(joiner.join(ctx.getVariations()), 2000));
Piece result = dao.persist(piece);
try {
fileStorageService.storeFile(getMp3FilePath(result.getId()), mp3);
fileStorageService.storeFile(getMidiFilePath(result.getId()), midi);
} catch (IOException e) {
throw new IllegalStateException(e);
}
return result;
}