public void resolveField(final NakedObject object, final NakedObjectField field) { if (field.isValue()) { return; } NakedReference reference = (NakedReference) field.get(object); if (reference == null || reference.getResolveState().isResolved()) { return; } if (!reference.getResolveState().isPersistent()) { return; } if (LOG.isInfoEnabled()) { // don't log object - it's toString() may use the unresolved field or unresolved collection LOG.info("resolve field " + object.getSpecification().getShortName() + "." + field.getId() + ": " + reference.getSpecification().getShortName() + " " + reference.getResolveState().code() + " " + reference.getOid()); } objectStore.resolveField(object, field); }
public static void addObjectMenuOptions(final NakedReference object, final UserActionSet options) { if (object != null) { NakedObjectAction[] actions1 = object.getSpecification().getObjectActions(NakedObjectAction.USER); NakedObjectAction[] actions2 = object.getSpecification().getObjectActions(NakedObjectAction.EXPLORATION); NakedObjectAction[] actions3 = object.getSpecification().getObjectActions(NakedObjectAction.DEBUG); NakedObjectAction[] actions = new NakedObjectAction[actions1.length + actions2.length + actions3.length]; System.arraycopy(actions1, 0, actions, 0, actions1.length); System.arraycopy(actions2, 0, actions, actions1.length, actions2.length); System.arraycopy(actions3, 0, actions, actions1.length + actions2.length, actions3.length); menuOptions(actions, object, options); Oid oid = object.getOid(); boolean isPersistent = oid != null && !oid.isTransient(); if (!(Features.isService(object.getSpecification())) && !(object.getObject() instanceof InstanceCollectionVector) && isPersistent) { options.add(new DisposeObjectOption()); } } }
public ConcurrencyException(final NakedReference object, final Version updated) { this(object.getVersion().getUser() + " changed " + object.titleString() + " at " + DATE_TIME.format(object.getVersion().getTime()) + "\n\n" + object.getVersion() + " ~ " + updated + "", object.getOid()); }
public void madePersistent(final NakedReference adapter) { Oid oid = adapter.getOid(); /* * WARNING - changing the OID object that is already a key in the identity map messes up the hashing * so it can't be found afterwards. To work properly, remove the identity first then change the oid, * finally re-add to the map. */ identites.remove(oid); NakedObjectsContext.getObjectPersistor().convertTransientToPersistentOid(oid); Assert.assertTrue("Adapter's pojo should exist in pojo map and return the adapter", objectAdapters.get(adapter .getObject()) == adapter); Assert.assertNull("Changed OID should not already map to a known adapter " + oid, identites.get(oid)); identites.put(oid, adapter); adapter.changeState(ResolveState.RESOLVED); }
private boolean isPersistent(final NakedReference object) { return object.getResolveState().isPersistent(); }
private boolean isToBeExecutedRemotely(final NakedReference target) { boolean remoteOverride = getTarget() == NakedObjectAction.REMOTE; boolean localOverride = getTarget() == NakedObjectAction.LOCAL; if (localOverride) { return false; } if (remoteOverride) { return true; } if (Features.isService(target.getSpecification())) { return true; } if (target == null) { // for static methods there is no target return false; } boolean remoteAsPersistent = target.getResolveState().isPersistent(); return remoteAsPersistent; }
public NakedReference realTarget(final NakedReference target) { if (!isOnInstance()) { // class actions have no target object return null; } else if (target == null) { return findService(); } else if (Features.isService(target.getSpecification())) { return target; } else if (isContributedMethodWithSuitableParameter()) { return findService(); } else { return target; } }
public String title() { return getTarget().titleString(); }
public String getIconName() { return getTarget().getIconName(); } }
public void madePersistent(final NakedReference adapter) { Oid oid = adapter.getOid(); /* * WARNING - changing the OID object that is already a key in the identity map messes up the hashing * so it can't be found afterwards. To work properly, remove the identity first then change the oid, * finally re-add to the map. */ identites.remove(oid); NakedObjectsContext.getObjectPersistor().convertTransientToPersistentOid(oid); Assert.assertTrue("Adapter's pojo should exist in pojo map and return the adapter", objectAdapters.get(adapter .getObject()) == adapter); Assert.assertNull("Changed OID should not already map to a known adapter " + oid, identites.get(oid)); identites.put(oid, adapter); adapter.changeState(ResolveState.RESOLVED); }
public void start(final NakedReference object, final ResolveState targetState) { if ( !object.getResolveState().isValidToChangeTo(targetState)) { throw new TestProxyException("Not valid to change from " + object.getResolveState() + " to " + targetState); } ((TestProxyNakedObject) object).setupResolveState(targetState); }
public Naked[] getDefaultParameterValues(NakedReference target) { NakedReference realTarget = realTarget(target); Object[] defaults = reflectiveAdapter.getParameterDefaults(realTarget); int parameterCount = getParameterCount(); Naked[] parameters = new Naked[parameterCount]; if (defaults != null) { NakedObjectSpecification[] parameterTypes = getParameterTypes(); for (int i = 0; i < parameterCount; i++) { parameters[i] = adaptedPojo(defaults[i], parameterTypes[i]); } } if (isContributedMethodWithSuitableParameter() && target != null) { NakedObjectSpecification[] parameterTypes = getParameterTypes(); for (int i = 0; i < parameterCount; i++) { if (target.getSpecification().isOfType(parameterTypes[i])) { parameters[i] = target; } } } return parameters; }
public void resolveField(final NakedObject object, final NakedObjectField field) { if (field.isValue()) { return; } NakedReference reference = (NakedReference) field.get(object); if (reference != null && reference.getResolveState().isResolved()) { return; } if (reference == null || !reference.getResolveState().isPersistent()) { return; } LOG.info("resolve-eagerly on server " + object + "/" + field.getId()); Data data = connection.resolveField(NakedObjectsContext.getSession(), encoder.createIdentityData(object), field.getId()); encoder.restore(data); }
private static void menuOptions( final NakedObjectAction[] actions, final NakedReference target, final UserActionSet menuOptionSet) { for (int i = 0; i < actions.length; i++) { UserAction option = null; if (actions[i].getActions().length > 0) { option = new UserActionSet(actions[i].getName(), menuOptionSet); menuOptions(actions[i].getActions(), target, (UserActionSet) option); } else { int noOfParameters = actions[i].getParameterTypes().length; if (noOfParameters == 0) { option = ImmediateObjectOption.createOption(actions[i], target); } else if (actions[i].isContributedMethodWithSuitableParameter() && noOfParameters == 1 && target != null && target.getSpecification().isOfType(actions[i].getParameterTypes()[0])) { option = ImmediateObjectOption.createServiceOption(actions[i], target); } else { option = DialoggedObjectOption.createOption(actions[i], target); } } if (option != null) { menuOptionSet.add(option); } } } }
public void end(final NakedReference object) { ResolveState finalState = object.getResolveState().getEndState(); ((TestProxyNakedObject) object).setupResolveState(finalState); }
public void end(final NakedReference object) { ResolveState finalState = object.getResolveState().getEndState(); ((DummyNakedObject) object).setupResolveState(finalState); }
public void viewMenuOptions(final UserActionSet options) { super.viewMenuOptions(options); TreeDisplayRules.menuOptions(options); options.add(new AbstractUserAction("Select node") { public void execute(final Workspace workspace, final View view, final Location at) { selectNode(); } public String getDescription(final View view) { return "Show this node in the right-hand pane"; } }); Naked object = getView().getContent().getNaked(); ResolveState resolveState = ((NakedReference) object).getResolveState(); if (object instanceof NakedReference && (resolveState.isGhost() || resolveState.isPartlyResolved())) { options.add(new AbstractUserAction("Load object") { public void execute(final Workspace workspace, final View view, final Location at) { resolveContent(); } }); } }