2323import javax .persistence .criteria .Root ;
2424import java .lang .reflect .Method ;
2525import java .util .*;
26- import java .util .function .Consumer ;
2726import java .util .function .Function ;
2827import java .util .function .Supplier ;
28+ import java .util .function .UnaryOperator ;
2929import java .util .stream .Collectors ;
3030import java .util .stream .Stream ;
3131
3232@ Singleton
3333public class JpaCommitDao extends JpaDao <Commit > implements CommitDao {
3434 // TODO Explore alternative to serializing lazy entity attributes that doesn't involve resolving all proxies one level.
35- static Consumer <Commit > PROXY_RESOLVER = commit -> commit .getChanges ().stream ()
36- .filter (Objects ::nonNull ).map (ElementVersion ::getData )
37- .filter (mof -> mof instanceof Element ).map (mof -> (Element ) mof )
38- .forEach (JpaElementDao .PROXY_RESOLVER );
35+ static UnaryOperator <Commit > PROXY_RESOLVER = commit -> {
36+ commit .getChanges ().stream ()
37+ .filter (Objects ::nonNull )
38+ .map (ElementVersion ::getData )
39+ .filter (mof -> mof instanceof Element )
40+ .map (mof -> (Element ) mof )
41+ .map (JpaElementDao .PROXY_RESOLVER )
42+ .forEach (e -> {
43+ });
44+ return commit ;
45+ };
3946
4047 @ Inject
4148 private JPAManager jpa ;
@@ -172,19 +179,27 @@ public void setIdentifier(UUID identifier) {
172179 });*/
173180
174181 return jpa .transact (em -> {
175- commit .getChanges ().stream ().map (ElementVersion ::getData ).filter (mof -> mof instanceof MofObjectImpl ).map (mof -> (MofObjectImpl ) mof ).map (mof -> {
176- try {
177- MofObjectImpl firstPassMof = mof .getClass ().getConstructor ().newInstance ();
178- firstPassMof .setKey (mof .getKey ());
179- return firstPassMof ;
180- } catch (ReflectiveOperationException e ) {
181- throw new RuntimeException (e );
182- }
183- }).forEach (em ::merge );
184- commit .setChanges (commit .getChanges ().stream ().map (em ::merge ).collect (Collectors .toSet ()));
182+ commit .getChanges ().stream ()
183+ .map (ElementVersion ::getData )
184+ .filter (mof -> mof instanceof MofObjectImpl )
185+ .map (mof -> (MofObjectImpl ) mof )
186+ .map (mof -> {
187+ try {
188+ MofObjectImpl firstPassMof = mof .getClass ().getConstructor ().newInstance ();
189+ firstPassMof .setKey (mof .getKey ());
190+ return firstPassMof ;
191+ } catch (ReflectiveOperationException e ) {
192+ throw new RuntimeException (e );
193+ }
194+ })
195+ .forEach (em ::merge );
196+ commit .setChanges (
197+ commit .getChanges ().stream ()
198+ .map (em ::merge )
199+ .collect (Collectors .toSet ())
200+ );
185201 Optional <Commit > persistedCommit = super .persist (commit , em );
186- persistedCommit .ifPresent (PROXY_RESOLVER );
187- return persistedCommit ;
202+ return persistedCommit .map (PROXY_RESOLVER );
188203 });
189204 }
190205
@@ -253,8 +268,7 @@ public Optional<Commit> findByProjectAndId(Project project, UUID id) {
253268 } catch (NoResultException e ) {
254269 return Optional .empty ();
255270 }
256- commit .ifPresent (PROXY_RESOLVER );
257- return commit ;
271+ return commit .map (PROXY_RESOLVER );
258272 });
259273 }
260274
@@ -273,8 +287,7 @@ public Optional<Commit> findHeadByProject(Project project) {
273287 } catch (NoResultException e ) {
274288 return Optional .empty ();
275289 }
276- commit .ifPresent (PROXY_RESOLVER );
277- return commit ;
290+ return commit .map (PROXY_RESOLVER );
278291 });
279292 }
280293
0 commit comments