eu.xsdi.mdlui.views.MismatchPropertiesBlock.java Source code

Java tutorial

Introduction

Here is the source code for eu.xsdi.mdlui.views.MismatchPropertiesBlock.java

Source

/*
 * LICENSE: This program is being made available under the LGPL 3.0 license.
 * For more information on the license, please read the following:
 * http://www.gnu.org/licenses/lgpl-3.0.txt
 * 
 * For additional information on the Model behind Mismatches, please refer to
 * the following publication(s):
 * Thorsten Reitz (2010): A Mismatch Description Language for Conceptual Schema 
 * Mapping and Its Cartographic Representation, Geographic Information Science,
 * http://www.springerlink.com/content/um2082120r51232u/
 */
package eu.xsdi.mdlui.views;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.ui.forms.DetailsPart;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.MasterDetailsBlock;
import org.eclipse.ui.forms.SectionPart;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Section;

import eu.esdihumboldt.commons.goml.omwg.FeatureClass;
import eu.esdihumboldt.commons.goml.omwg.Property;
import eu.esdihumboldt.commons.goml.rdf.About;
import eu.xsdi.mdl.model.Consequence;
import eu.xsdi.mdl.model.Mismatch;
import eu.xsdi.mdl.model.Mismatch.MismatchType;
import eu.xsdi.mdl.model.MismatchCell;
import eu.xsdi.mdl.model.Reason;
import eu.xsdi.mdl.model.Reason.EntityCharacteristic;
import eu.xsdi.mdl.model.reason.ReasonCondition;
import eu.xsdi.mdl.model.reason.ReasonRule;
import eu.xsdi.mdl.model.reason.ReasonSet;

/**
 * This {@link MasterDetailsBlock} implementation allows to edit {@link Mismatch} objects.
 * 
 * @author Thorsten Reitz
 * @version $Id$ 
 * @since 0.1.0
 */
public class MismatchPropertiesBlock extends MasterDetailsBlock {

    /**
     * Default Constructor.
     */
    public MismatchPropertiesBlock() {
        super();
    }

    /* (non-Javadoc)
     * @see org.eclipse.ui.forms.MasterDetailsBlock#createMasterPart(org.eclipse.ui.forms.IManagedForm, org.eclipse.swt.widgets.Composite)
     */
    @Override
    protected void createMasterPart(final IManagedForm managedForm, Composite parent) {
        FormToolkit toolkit = managedForm.getToolkit();

        Section section = toolkit.createSection(parent, Section.DESCRIPTION | Section.TITLE_BAR);
        section.setText("Mismatches"); //$NON-NLS-1$
        section.setDescription("Select the Mismatch or one of it's children to view and edit it."); //$NON-NLS-1$
        section.marginWidth = 10;
        section.marginHeight = 5;

        Composite client = toolkit.createComposite(section, SWT.WRAP);
        GridLayout layout = new GridLayout();
        layout.numColumns = 2;
        layout.marginWidth = 2;
        layout.marginHeight = 2;
        client.setLayout(layout);
        Tree tree = toolkit.createTree(client, SWT.NULL);
        GridData gd = new GridData(GridData.FILL_BOTH);
        gd.heightHint = 20;
        gd.widthHint = 250;
        tree.setLayoutData(gd);
        toolkit.paintBordersFor(client);
        section.setClient(client);

        final SectionPart spart = new SectionPart(section);
        managedForm.addPart(spart);
        TreeViewer mismatchTreeViewer = new TreeViewer(tree);
        mismatchTreeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
            @Override
            public void selectionChanged(SelectionChangedEvent event) {
                managedForm.fireSelectionChanged(spart, event.getSelection());
            }
        });
        mismatchTreeViewer.setContentProvider(new MismatchTreeContentProvider());
        mismatchTreeViewer.setLabelProvider(new MismatchTreeLabelProvider());
        mismatchTreeViewer.setInput(getDummyCell());
    }

    private Object getDummyCell() {
        Mismatch a = new Mismatch(MismatchType.AggregationLevelMismatch);
        a.setReason(new Reason(new FeatureClass(new About("FC1")), new FeatureClass(new About("FC2")),
                EntityCharacteristic.AssociationCardinalityConstraint));

        a.getConsequences().add(new Consequence());
        a.getConsequences().add(new Consequence());
        a.getConsequences().add(new Consequence());
        a.setProvenance("HALE MDL Inference Engine");

        Mismatch b = new Mismatch(MismatchType.StructureMismatch);
        b.setReason(new Reason(new Property(new About("Prop1Name")), new Property(new About("Prop2Name")),
                EntityCharacteristic.AttributeTypeConstraint));
        b.getReason().setReasonRule(new ReasonRule(new ReasonSet("Prop1Name"), new ReasonSet("Prop2Name")));
        List<ReasonCondition> conditions = new ArrayList<ReasonCondition>();
        conditions.add(new ReasonCondition("attributeName", "attributeFilterValue", null));
        b.getReason().getReasonRule().getSet1().setConditions(conditions);
        b.getReason().getReasonRule().getSet1().setSubSet(new ReasonSet("SubProp1Name"));
        b.getConsequences().add(new Consequence());
        b.setProvenance("User");

        Mismatch c = new Mismatch(MismatchType.AbstractionMismatch);
        c.setReason(new Reason(new Property(new About("Prop3Name")), new Property(new About("Prop4Name")),
                EntityCharacteristic.AttributeDerivedPopulatedValues));
        c.getReason().setReasonRule(new ReasonRule(new ReasonSet("Prop3Name"), new ReasonSet("Prop4Name")));
        c.getConsequences().add(new Consequence());
        c.getConsequences().add(new Consequence());
        c.setProvenance("HALE MDL Inference Engine");

        MismatchCell mc = new MismatchCell();
        mc.getMismatches().add(a);
        mc.getMismatches().add(b);
        mc.getMismatches().add(c);
        return mc;
    }

    /**
     * @see org.eclipse.ui.forms.MasterDetailsBlock#applyLayoutData(SashForm)
     */
    @Override
    protected void applyLayoutData(SashForm sashForm) {
        sashForm.setLayoutData(new GridData(GridData.FILL_BOTH));
    }

    /**
     * @see org.eclipse.ui.forms.MasterDetailsBlock#createToolBarActions(org.eclipse.ui.forms.IManagedForm)
     */
    @Override
    protected void createToolBarActions(IManagedForm managedForm) {
        // TODO Auto-generated method stub

    }

    /**
     * @see org.eclipse.ui.forms.MasterDetailsBlock#registerPages(org.eclipse.ui.forms.DetailsPart)
     */
    @Override
    protected void registerPages(DetailsPart detailsPart) {
        detailsPart.registerPage(Mismatch.class, new MismatchDetailsPage());
        detailsPart.registerPage(Reason.class, new ReasonDetailsPage());
        detailsPart.registerPage(Consequence.class, new ConsequenceDetailsPage());
    }

    /**
     * @param weights the int array of weights
     */
    public void setContentWeight(int[] weights) {
        super.sashForm.setWeights(weights);
    }

}