@SuppressWarnings("unchecked") @Test public void testMemberNameLifecycle() { Name<String> owner = name("test"); NameProvider sut = NameProvider.create(owner); sut.addMemberName(name("m1")); sut.addMemberName(name("m2")); assertThat(sut.pendingMemberNames(),contains(name("m1"),name("m2"))); assertThat(sut.nextMemberName(),equalTo(name("m1"))); assertThat(sut.pendingMemberNames(),contains(name("m2"))); assertThat(sut.nextMemberName(),equalTo(name("m2"))); assertThat(sut.pendingMemberNames(),hasSize(0)); try { sut.nextMemberName(); fail("Should not provide member names if not available"); } catch (ApplicationRuntimeException e) { assertThat(e.getMessage(),equalTo("No more member names available for resource 'test'")); } }
/** * {@inheritDoc}<br> * * Create a new book resource. */ @Override public ResourceSnapshot create(ContainerSnapshot container, DataSet representation, WriteSession session) { NameProvider nameProvider = nameProvider(container.name()); Name<?> nextName = nameProvider.nextMemberName(); try { bookHandler().add(nextName,representation); ResourceSnapshot newMember = container.addMember(nextName); session.saveChanges(); return newMember; } catch (Exception e) { bookHandler().remove(nextName); throw new ApplicationRuntimeException("Could not create member",e); } }