@Override void saveChanges(final DelegatedResourceSnapshot ctx) { delegate(ctx).accept(new ResourceSaver()); this.deletedAttachments.clear(); this.newAttachments.clear(); this.deletedMembers.clear(); this.newMembers.clear(); }
static MemberCollection createFromResource(Resource resource, final DelegatedWriteSession session) { final MemberCollection memberRepository = new MemberCollection(); resource.accept( new ResourceVisitor() { @Override public void visitResource(Resource resource) { // Nothing to do } @Override public void visitContainer(Container resource) { for(Member member:resource.members()) { DelegatedResourceSnapshot memberResourceSnapshot = session.resolveResource(member.memberId()); checkState(memberResourceSnapshot!=null,"Could not resolve member %s of container %s",member,resource); memberRepository.registerMember(memberResourceSnapshot); } } } ); return memberRepository; }
@Override void saveChanges(final DelegatedResourceSnapshot ctx) { delegate(ctx).accept(new ResourceSaver(ctx)); }
DelegatedResourceSnapshot newPersistent(Resource resource, final ResourceTemplate template) { final AtomicReference<DelegatedResourceSnapshot> result=new AtomicReference<DelegatedResourceSnapshot>(); resource.accept( new ResourceVisitor() { @Override public void visitResource(Resource resource) { DelegatedResourceSnapshot snapshot=new DelegatedResourceSnapshot(resource.id(),template.handlerClass()); snapshot.setParentState(ParentState.parentOf(resource)); snapshot.setPersistencyState(PersistencyState.newPersistentReferenceState(resource.id(),template)); result.set(snapshot); } @Override public void visitContainer(Container resource) { DelegatedContainerSnapshot snapshot=new DelegatedContainerSnapshot(resource.id(),handlerClass(template,ContainerHandler.class)); snapshot.setParentState(ParentState.parentOf(resource)); snapshot.setPersistencyState(PersistencyState.newPersistentReferenceState(resource.id(),template)); result.set(snapshot); } } ); return result.get(); }
/** * {@inheritDoc} */ @Override public void add(Resource resource) { checkNotNull(resource,"Resource cannot be null"); lock.writeLock().lock(); try { checkState(find(resource.id())==null,"A resource with identifier '%s' already exists",resource.id()); resource.accept( new ResourceVisitor() { @Override public void visitResource(Resource resource) { InMemoryResourceRepository.this.resources.put(resource.id(),resource); } @Override public void visitContainer(Container resource) { InMemoryResourceRepository.this.containers.put(resource.id(),resource); } } ); } finally { lock.writeLock().unlock(); } }