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

org.nakedobjects.plugins.htmlviewer.task.AddItemToCollectionTask Maven / Gradle / Ivy

The newest version!
package org.nakedobjects.plugins.htmlviewer.task;

import org.nakedobjects.metamodel.adapter.NakedObject;
import org.nakedobjects.metamodel.consent.Consent;
import org.nakedobjects.metamodel.facets.collections.modify.CollectionFacet;
import org.nakedobjects.metamodel.spec.feature.OneToManyAssociation;
import org.nakedobjects.metamodel.util.CollectionFacetUtils;
import org.nakedobjects.plugins.htmlviewer.component.Page;
import org.nakedobjects.plugins.htmlviewer.request.Context;
import org.nakedobjects.runtime.context.NakedObjectsContext;
import org.nakedobjects.runtime.persistence.PersistenceSession;
import org.nakedobjects.runtime.transaction.NakedObjectTransactionManager;
import org.nakedobjects.plugins.htmlviewer.request.Task;



public class AddItemToCollectionTask extends Task {
    private final OneToManyAssociation field;

    protected AddItemToCollectionTask(final Context context, final NakedObject target, final OneToManyAssociation fld) {
        super(context, "Add to collection", "", target, 1);
        names[0] = fld.getName();
        descriptions[0] = fld.getDescription();
        fieldSpecifications[0] = fld.getSpecification();
        initialState[0] = null;
        optional[0] = true;
        // TODO add defaults and options
        this.field = fld;
    }

    @Override
    public void checkForValidity(final Context context) {
        final NakedObject target = getTarget(context);
        final NakedObject[] parameters = getEntries(context);

        final Consent valueValid = field.isValidToAdd(target, parameters[0]);
        errors[0] = valueValid.getReason();
    }

    @Override
    public void checkInstances(final Context context, final NakedObject[] objects) {
        final NakedObject collection = field.get(getTarget(context));
        final CollectionFacet facet = CollectionFacetUtils.getCollectionFacetFromSpec(collection);
        final NakedObject target = getTarget(context);
        for (int i = 0; i < objects.length; i++) {
            final Consent valueValid = field.isValidToAdd(target, objects[i]);
            if (valueValid.isVetoed()) {
                objects[i] = null;
            } else if (facet.contains(collection, objects[i])) {
                objects[i] = null;
            }
        }
    }

    @Override
    public NakedObject completeTask(final Context context, final Page page) {
        final NakedObject targetAdapter = getTarget(context);
        final NakedObject[] parameterAdapters = getEntries(context);

        getTransactionManager().startTransaction();

        field.addElement(targetAdapter, parameterAdapters[0]);

        if (targetAdapter.isTransient()) {
            getPersistenceSession().makePersistent(targetAdapter);
        }
        getTransactionManager().endTransaction();
        return targetAdapter;
    }

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

    ///////////////////////////////////////////////////////
    // Dependencies (from context)
    ///////////////////////////////////////////////////////

    private static NakedObjectTransactionManager getTransactionManager() {
        return getPersistenceSession().getTransactionManager();
    }

    private static PersistenceSession getPersistenceSession() {
        return NakedObjectsContext.getPersistenceSession();
    }


}

// Copyright (c) Naked Objects Group Ltd.




© 2015 - 2025 Weber Informatics LLC | Privacy Policy