/** * Remove an associated object (the element) from the specified * ObjectAdapter in the association field represented by this object. */ @Override public void remove(final ObjectAdapter inObject, final ObjectAdapter associate) { if (inObject.isPersistent()) { LOG.debug("clear association remotely " + inObject + "/" + associate); try { final IdentityData targetReference = encoder.encodeIdentityData(inObject); final IdentityData associateReference = encoder.encodeIdentityData(associate); final ClearAssociationRequest request = new ClearAssociationRequest(getAuthenticationSession(), name, targetReference, associateReference); final ClearAssociationResponse response = serverFacade.clearAssociation(request); final ObjectData[] updates = response.getUpdates(); encoder.decode(updates); } catch (final ConcurrencyException e) { throw ProxyUtil.concurrencyException(e); } catch (final IsisException e) { LOG.error("remote exception: " + e.getMessage(), e); throw e; } } else { LOG.debug("clear association locally " + inObject + "/" + associate); underlyingFacet.remove(inObject, associate); } }
@Override public void add(final ObjectAdapter inObject, final ObjectAdapter referencedAdapter) { if (inObject.isPersistent()) { try { final IdentityData targetReference = encoderDecoder.encodeIdentityData(inObject); final IdentityData associateReference = encoderDecoder.encodeIdentityData(referencedAdapter); final SetAssociationRequest request = new SetAssociationRequest(getAuthenticationSession(), name, targetReference, associateReference); final SetAssociationResponse response = serverFacade.setAssociation(request); final ObjectData[] updates = response.getUpdates(); encoderDecoder.decode(updates); } catch (final ConcurrencyException e) { throw ProxyUtil.concurrencyException(e); } catch (final IsisException e) { LOG.error("remote exception: " + e.getMessage(), e); throw e; } } else { underlyingFacet.add(inObject, referencedAdapter); } }
@Test public void testSetAssociationFailsWhenInvisible() { nameField.setUpIsVisible(false); try { final SetAssociationRequest request = new SetAssociationRequest(authenticationSession, "director", movieData, personData); server.setAssociation(request); fail(); } catch (final IsisException expected) { assertEquals("can't modify field as not visible or editable", expected.getMessage()); } }
@Test public void testSetAssociationFailsWhenUnavailable() { nameField.setUpIsUnusableFor(movieAdapter); try { final SetAssociationRequest request = new SetAssociationRequest(authenticationSession, "director", movieData, personData); server.setAssociation(request); fail(); } catch (final IsisException expected) { assertEquals("can't modify field as not visible or editable", expected.getMessage()); } }
@Test public void testSetAssociationFailsWhenUnavailable() { nameField.setUpIsUnusableFor(object); try { final SetValueRequest request = new SetValueRequest(session, "name", movieData, new DummyEncodeableObjectData("test data")); server.setValue(request); fail(); } catch (final IsisException expected) { assertEquals("can't modify field as not visible or editable", expected.getMessage()); } }
@Test public void testSetAssociationFailsWhenInvisible() { nameField.setUpIsVisible(false); try { final SetValueRequest request = new SetValueRequest(session, "name", movieData, new DummyEncodeableObjectData("name of movie")); server.setValue(request); fail(); } catch (final IsisException expected) { assertEquals("can't modify field as not visible or editable", expected.getMessage()); } }