Package org.objectstyle.wolips.eomodeler.editors.qualifier

Source Code of org.objectstyle.wolips.eomodeler.editors.qualifier.AggregateQualifierTypeEditor

/**
*
*/
package org.objectstyle.wolips.eomodeler.editors.qualifier;

import java.util.LinkedList;
import java.util.List;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.objectstyle.wolips.eomodeler.core.model.qualifier.EOAggregateQualifier;
import org.objectstyle.wolips.eomodeler.core.model.qualifier.EOQualifier;
import org.objectstyle.wolips.eomodeler.core.model.qualifier.EOTruePredicate;

public abstract class AggregateQualifierTypeEditor extends AbstractQualifierTypeEditor implements IQualifierEditorListener {
  private List<EOQualifierEditor> _editors;

  public AggregateQualifierTypeEditor(Composite parent, int style) {
    super(parent, style);
    _editors = new LinkedList<EOQualifierEditor>();
    GridLayout layout = new GridLayout(1, false);
    layout.marginLeft = 0;
    layout.marginRight = 0;
    layout.marginWidth = 0;
    layout.marginTop = 0;
    layout.marginBottom = 0;
    layout.marginHeight = 0;
    layout.horizontalSpacing = 0;
    layout.verticalSpacing = 0;
    setLayout(layout);
  }

  public void setQualifier(EOQualifier qualifier) {
    for (EOQualifierEditor editor : _editors) {
      editor.dispose();
    }
    _editors.clear();

    List<EOQualifier> qualifiers;
    if (qualifier instanceof EOAggregateQualifier) {
      EOAggregateQualifier andQualifier = (EOAggregateQualifier) qualifier;
      qualifiers = andQualifier.getQualifiers();
    } else {
      qualifiers = new LinkedList<EOQualifier>();
      qualifiers.add(qualifier);
    }
    if (qualifiers.size() == 1) {
      qualifiers.add(new EOTruePredicate());
    }
    for (EOQualifier childQualifier : qualifiers) {
      EOQualifierEditor childEditor = createEditor();
      childEditor.setQualifier(childQualifier);
      _editors.add(childEditor);
    }
  }

  public EOQualifier getQualifier() {
    List<EOQualifier> qualifiers = new LinkedList<EOQualifier>();
    for (EOQualifierEditor editor : _editors) {
      EOQualifier childQualifier = editor.getQualifier();
      if (childQualifier != null) {
        qualifiers.add(childQualifier);
      }
    }
    EOQualifier qualifier;
    if (qualifiers.isEmpty()) {
      qualifier = null;
    } else if (qualifiers.size() == 1) {
      qualifier = qualifiers.get(0);
    } else {
      EOAggregateQualifier aggregateQualifier = createQualifier();
      aggregateQualifier.getQualifiers().addAll(qualifiers);
      qualifier = aggregateQualifier;
    }
    return qualifier;
  }

  protected EOQualifierEditor createEditor() {
    EOQualifierEditor childEditor = new EOQualifierEditor(this, SWT.NONE);
    childEditor.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    childEditor.setQualifierEditorListener(this);
    return childEditor;
  }

  public void qualifierAddedAbove(EOQualifierEditor editor) {
    int index = _editors.indexOf(editor);
    EOQualifierEditor newEditor = createEditor();
    _editors.add(index, newEditor);
    newEditor.moveAbove(editor);
    layout(true, true);
    getParent().layout(true, true);
  }

  public void qualifierAddedBelow(EOQualifierEditor editor) {
    int index = _editors.indexOf(editor);
    EOQualifierEditor newEditor = createEditor();
    _editors.add(index + 1, newEditor);
    newEditor.moveBelow(editor);
    layout(true, true);
    getParent().layout(true, true);
  }

  public void qualifierRemoved(EOQualifierEditor editor) {
    _editors.remove(editor);
    editor.dispose();

    if (_editors.size() == 1) {
      IQualifierTypeEditorListener listener = getQualifierTypeEditorListener();
      if (listener != null) {
        listener.qualifierTypeChanged(this);
      }
    }

    layout(true, true);
    getParent().layout(true, true);
  }

  protected abstract EOAggregateQualifier createQualifier();
}
TOP

Related Classes of org.objectstyle.wolips.eomodeler.editors.qualifier.AggregateQualifierTypeEditor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.