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

org.nakedobjects.plugins.dnd.viewer.table.AbstractTableSpecification Maven / Gradle / Ivy

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

import org.apache.log4j.Logger;
import org.nakedobjects.metamodel.spec.NakedObjectSpecification;
import org.nakedobjects.metamodel.spec.feature.NakedObjectAssociation;
import org.nakedobjects.metamodel.spec.feature.NakedObjectAssociationFilters;
import org.nakedobjects.metamodel.spec.feature.OneToManyAssociation;
import org.nakedobjects.plugins.dnd.CollectionContent;
import org.nakedobjects.plugins.dnd.Content;
import org.nakedobjects.plugins.dnd.SubviewSpec;
import org.nakedobjects.plugins.dnd.View;
import org.nakedobjects.plugins.dnd.ViewAxis;
import org.nakedobjects.plugins.dnd.ViewRequirement;
import org.nakedobjects.plugins.dnd.ViewSpecification;
import org.nakedobjects.plugins.dnd.viewer.builder.AbstractCompositeViewSpecification;
import org.nakedobjects.plugins.dnd.viewer.builder.CollectionElementBuilder;
import org.nakedobjects.plugins.dnd.viewer.builder.StackLayout;


public abstract class AbstractTableSpecification extends AbstractCompositeViewSpecification implements SubviewSpec {
    private static final Logger LOG = Logger.getLogger(AbstractTableSpecification.class);

    private ViewSpecification rowSpecification;

    public AbstractTableSpecification() {
        builder = new StackLayout(new CollectionElementBuilder(this));
        rowSpecification = new TableRowSpecification();
    }

    public boolean canDisplay(final Content content, ViewRequirement requirement) {
        if (!content.isCollection() || !requirement.is(ViewRequirement.OPEN)) {
            return false;
        } else {
            CollectionContent collectionContent = (CollectionContent) content;
            final NakedObjectSpecification elementSpecification = collectionContent.getElementSpecification();
            final NakedObjectAssociation[] fields = elementSpecification
                    .getAssociations(NakedObjectAssociationFilters.STATICALLY_VISIBLE_ASSOCIATIONS);
            for (int i = 0; i < fields.length; i++) {
                if (fields[i].isOneToOneAssociation()) {
                    return true;
                }
            }
            return false;
        }
    }

    public View createSubview(final Content content, final ViewAxis axis, int fieldNumber) {
        return rowSpecification.createView(content, axis);
    }

    @Override
    protected ViewAxis axis(Content content) {
        // TODO create axis first, then after view built set up the axis details?
        final NakedObjectSpecification elementSpecification = ((CollectionContent) content).getElementSpecification();
        final NakedObjectAssociation[] accessibleFields = elementSpecification
                .getAssociations(NakedObjectAssociationFilters.STATICALLY_VISIBLE_ASSOCIATIONS);
        final TableAxis tableAxis = new TableAxis(tableFields(accessibleFields, content));
        // TODO make the setting of the column width strategy external so it can be changed
        tableAxis.setupColumnWidths(new TypeBasedColumnWidthStrategy());
        return tableAxis;
    }
    
    protected View decorateView(View view) {

   //     final View table = super.createView(content, tableAxis);
        TableAxis tableAxis = (TableAxis) view.getViewAxis();
        tableAxis.setRoot(view);

        return view;
        //return doCreateView(table, content, axis);
    }
    
    protected abstract View doCreateView(final View table, final Content content, final ViewAxis axis);

    public String getName() {
        return "Standard Table";
    }

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

    @Override
    public boolean isResizeable() {
        return true;
    }
    
    private NakedObjectAssociation[] tableFields(final NakedObjectAssociation[] viewFields, final Content content) {
        for (int i = 0; i < viewFields.length; i++) {
            final NakedObjectAssociation nakedObjectAssociation = viewFields[i];
            // TODO reinstate check to skip unsuitable types
            /*
             * if (viewFields[i].getSpecification().isOfType(
             * NakedObjectsContext.getReflector().loadSpecification(ImageValue.class))) { continue; }
             */

          //  if (!nakedObjectAssociation.isVisible(NakedObjectsContext.getAuthenticationSession(), content.getNaked()).isAllowed()) {
          //      continue;
          //  }
            LOG.debug("column " + nakedObjectAssociation.getSpecification());
            // if(viewFields[i].getSpecification().isOfType(NakedObjects.getSpecificationLoader().lo));
        }

        final NakedObjectAssociation[] tableFields = new NakedObjectAssociation[viewFields.length];
        int c = 0;
        for (int i = 0; i < viewFields.length; i++) {
            if (!(viewFields[i] instanceof OneToManyAssociation)) {
                tableFields[c++] = viewFields[i];
            }
        }

        final NakedObjectAssociation[] results = new NakedObjectAssociation[c];
        System.arraycopy(tableFields, 0, results, 0, c);
        return results;
    }
}
// Copyright (c) Naked Objects Group Ltd.




© 2015 - 2025 Weber Informatics LLC | Privacy Policy