protected void setScopes(IDataModel dataModel) {
   if (dataModel != null) {
     setScopes(dataManager.getScopes(dataModel));
   }
 }
 private void initInputs() {
   dataModels.clear();
   scopes.clear();
   dataModels.addAll(dataManager.getAllDataModels());
 }
 protected void refresh() {
   setDataModels(dataManager.getAllDataModels());
   refreshDataModelSelection();
   setScopes(dataModel);
   setRequirements(scope != null ? scope.getRequirements() : null);
 }
  @Override
  public void createPartControl(Composite parent) {

    initInputs();

    Composite composite = new Composite(parent, SWT.NONE);
    composite.setLayout(new GridLayout(2, false));

    Label lblDataModel = new Label(composite, SWT.NONE);
    lblDataModel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
    lblDataModel.setText("Data Model :");

    cvDataModel = new ComboViewer(composite, SWT.NONE);
    cvDataModel.getCombo().setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
    cvDataModel.setContentProvider(ArrayContentProvider.getInstance());

    // TODO : use scope generated label provider
    cvDataModel.setLabelProvider(
        new LabelProvider() {

          @Override
          public String getText(Object element) {
            if (element instanceof IDataModel) {
              return ((IDataModel) element).getName();
            }
            return "";
          }
        });

    cvDataModel.setInput(dataManager.getAllDataModels());

    //		refreshBtn = new Button(composite, SWT.PUSH);
    //		refreshBtn.setImage(Activator.getImageDescriptor("icons/refresh.gif").createImage());
    //
    //		refreshBtn.setToolTipText("Refresh View");

    Label lblScope = new Label(composite, SWT.NONE);
    lblScope.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
    lblScope.setText("Scope :");

    cvScope = new ComboViewer(composite, SWT.NONE);
    cvScope.getCombo().setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
    cvScope.setContentProvider(ArrayContentProvider.getInstance());

    // TODO : use scope generated label provider
    cvScope.setLabelProvider(
        new LabelProvider() {

          @Override
          public String getText(Object element) {
            if (element instanceof Scope) {
              return ((Scope) element).getName();
            }
            return "";
          }
        });

    cvScope.setInput(scopes);

    viewer = new TreeViewer(composite, SWT.BORDER);
    viewer.getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1));
    viewer.setContentProvider(
        new ITreeContentProvider() {

          @Override
          public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}

          @Override
          public void dispose() {}

          @Override
          public boolean hasChildren(Object element) {
            //				if (element instanceof AbstractElement) {
            //					 EList<EAttribute> eAllAttributes = ((AbstractElement)
            // element).eClass().getEAllAttributes();
            //					for (EAttribute eAttribute : eAllAttributes) {
            //						if	(((AbstractElement) element).eGet(eAttribute, true) != null) {
            //							return true;
            //						}
            //					}
            //				}
            return false;
          }

          @Override
          public Object getParent(Object element) {
            return null;
          }

          @Override
          public Object[] getElements(Object inputElement) {
            return ArrayContentProvider.getInstance().getElements(inputElement);
          }

          @Override
          public Object[] getChildren(Object parentElement) {
            //				Collection<Object> result = new ArrayList<Object>();
            //				if (parentElement instanceof AbstractElement) {
            //					EList<EAttribute> eAllAttributes = ((AbstractElement)
            // parentElement).eClass().getEAllAttributes();
            //					for (EAttribute eAttribute : eAllAttributes) {
            //						value = ((AbstractElement) parentElement).eGet(eAttribute, true);
            //					}
            //				}
            return null;
          }
        });
    viewer.setLabelProvider(
        new LabelProvider() {

          @Override
          public String getText(Object element) {
            return DataUtil.getLabel(element);
          }
        });
    viewer.setInput(requirements);

    int dndOperations = DND.DROP_COPY | DND.DROP_MOVE;

    Transfer[] transfers;
    transfers = new Transfer[] {PluginTransfer.getInstance()};

    DragRequirementSourceAdapter listener = new DragRequirementSourceAdapter(viewer);
    ZigguratInject.inject(listener);
    viewer.addDragSupport(dndOperations, transfers, listener);
    getViewSite().setSelectionProvider(viewer);

    makeActions();
    contributeToActionBars();
    hookListeners();
  }