All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.nakedobjects.plugins.dnd.viewer.content.ObjectParameterImpl Maven / Gradle / Ivy

The newest version!
package org.nakedobjects.plugins.dnd.viewer.content;

import org.nakedobjects.metamodel.adapter.NakedObject;
import org.nakedobjects.metamodel.commons.debug.DebugString;
import org.nakedobjects.metamodel.commons.lang.ToString;
import org.nakedobjects.metamodel.consent.Allow;
import org.nakedobjects.metamodel.consent.Consent;
import org.nakedobjects.metamodel.consent.Veto;
import org.nakedobjects.metamodel.spec.NakedObjectSpecification;
import org.nakedobjects.metamodel.spec.feature.OneToOneActionParameter;
import org.nakedobjects.plugins.dnd.ObjectParameter;
import org.nakedobjects.plugins.dnd.UserActionSet;
import org.nakedobjects.plugins.dnd.View;
import org.nakedobjects.plugins.dnd.Workspace;
import org.nakedobjects.plugins.dnd.viewer.action.AbstractUserAction;
import org.nakedobjects.plugins.dnd.viewer.drawing.Location;


public class ObjectParameterImpl extends AbstractObjectContent implements ObjectParameter {
    private final NakedObject adapter;
    private final ActionHelper invocation;
    private final int index;
    private final NakedObject[] optionAdapters;
    private final OneToOneActionParameter nakedObjectActionParameter;

    public ObjectParameterImpl(
            final OneToOneActionParameter nakedObjectActionParameter,
            final NakedObject adapter,
            final NakedObject[] optionAdapters,
            final int i,
            final ActionHelper invocation) {
        this.nakedObjectActionParameter = nakedObjectActionParameter;
        this.optionAdapters = optionAdapters;
        this.index = i;
        this.invocation = invocation;
        this.adapter = adapter;
    }

    public ObjectParameterImpl(final ObjectParameterImpl content, final NakedObject object) {
        nakedObjectActionParameter = content.nakedObjectActionParameter;
        optionAdapters = content.optionAdapters;
        index = content.index;
        invocation = content.invocation;
        this.adapter = object;
    }

    @Override
    public Consent canClear() {
        return Allow.DEFAULT;
    }

    @Override
    public Consent canSet(final NakedObject dragSource) {
        if (dragSource.getSpecification().isOfType(getSpecification())) {
            // TODO: move logic into Facet
            return Allow.DEFAULT;
        } else {
            // TODO: move logic into Facet
            return new Veto(String.format("Object must be ", getSpecification().getShortName()));
        }
    }

    @Override
    public void clear() {
        setObject(null);
    }

    public void debugDetails(final DebugString debug) {
        debug.appendln("name", getParameterName());
        debug.appendln("required", isRequired());
        debug.appendln("object", adapter);
    }

    public NakedObject getNaked() {
        return adapter;
    }

    @Override
    public NakedObject getObject() {
        return adapter;
    }

    public NakedObject[] getOptions() {
        return optionAdapters;
    }

    @Override
    public boolean isObject() {
        return true;
    }

    public boolean isRequired() {
        return !nakedObjectActionParameter.isOptional();
    }

    @Override
    public boolean isPersistable() {
        return false;
    }

    public boolean isOptionEnabled() {
        return optionAdapters != null && optionAdapters.length > 0;
    }

    public boolean isTransient() {
        return adapter != null && adapter.isTransient();
    }

    @Override
    public void contentMenuOptions(final UserActionSet options) {
        if (adapter != null) {
            options.add(new AbstractUserAction("Clear parameter") {

                @Override
                public void execute(final Workspace workspace, final View view, final Location at) {
                    clear();
                    view.getParent().invalidateContent();
                }
            });

            OptionFactory.addObjectMenuOptions(adapter, options);
        } else {
            OptionFactory.addCreateOptions(getSpecification(), options);

        }

    }

    @Override
    public void setObject(final NakedObject object) {
        invocation.setParameter(index, object);
    }

    public String title() {
        return adapter == null ? "" : adapter.titleString();
    }

    @Override
    public String toString() {
        final ToString toString = new ToString(this);
        toString.append("label", getParameterName());
        toString.append("required", isRequired());
        toString.append("spec", getSpecification().getFullName());
        toString.append("object", adapter == null ? "null" : adapter.titleString());
        return toString.toString();
    }

    public String getParameterName() {
        return nakedObjectActionParameter.getName();
    }

    public NakedObjectSpecification getSpecification() {
        return nakedObjectActionParameter.getSpecification();
    }

    public String getDescription() {
        final String title = adapter == null ? "" : ": " + adapter.titleString();
        final String name = getParameterName();
        final NakedObjectSpecification specification = nakedObjectActionParameter.getSpecification();
        final String specName = specification.getShortName();
        final String type = name.indexOf(specName) == -1 ? " (" + specName + ")" : "";
        return name + type + title + " " + nakedObjectActionParameter.getDescription();
    }

    public String getHelp() {
        return invocation.getHelp();
    }

    public String getId() {
        return null;
    }
}
// Copyright (c) Naked Objects Group Ltd.




© 2015 - 2025 Weber Informatics LLC | Privacy Policy