/* * Copyright (c) 2013 Data Harmonisation Panel * * All rights reserved. This program and the accompanying materials are made * available under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of the License, * or (at your option) any later version. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution. If not, see <http://www.gnu.org/licenses/>. * * Contributors: * Data Harmonisation Panel <http://www.dhpanel.eu> */ package eu.esdihumboldt.hale.ui.filter.cql; import javax.xml.namespace.QName; import org.eclipse.swt.widgets.Shell; import eu.esdihumboldt.hale.common.align.model.AlignmentUtil; import eu.esdihumboldt.hale.common.align.model.Condition; import eu.esdihumboldt.hale.common.align.model.EntityDefinition; import eu.esdihumboldt.hale.common.align.model.impl.TypeEntityDefinition; import eu.esdihumboldt.hale.common.instance.model.Filter; import eu.esdihumboldt.hale.common.schema.model.Definition; import eu.esdihumboldt.hale.common.schema.model.PropertyDefinition; import eu.esdihumboldt.hale.common.schema.model.TypeDefinition; import eu.esdihumboldt.hale.common.schema.model.impl.DefaultPropertyDefinition; import eu.esdihumboldt.hale.common.schema.model.impl.DefaultTypeDefinition; import eu.esdihumboldt.hale.ui.filter.FilterDialogFactory; /** * Factory for {@link CQLFilterDialog}. * * @author Simon Templer */ public class CQLFilterDialogFactory implements FilterDialogFactory { @Override public Filter openDialog(Shell shell, EntityDefinition entityDef, String title, String message) { TypeEntityDefinition parentType; if (entityDef.getPropertyPath().isEmpty()) parentType = AlignmentUtil.getTypeEntity(entityDef); else { Definition<?> def = entityDef.getDefinition(); TypeDefinition propertyType = ((PropertyDefinition) def).getPropertyType(); // create a dummy type for the filter TypeDefinition dummyType = new DefaultTypeDefinition(new QName("ValueFilterDummy")); // create dummy type entity Condition condition = AlignmentUtil.getContextCondition(entityDef); Filter filter = condition == null ? null : condition.getFilter(); parentType = new TypeEntityDefinition(dummyType, entityDef.getSchemaSpace(), filter); // with the property type being contained as value // property new DefaultPropertyDefinition(new QName("value"), dummyType, propertyType); // and the parent type as parent property new DefaultPropertyDefinition(new QName("parent"), dummyType, ((PropertyDefinition) def).getParentType()); } CQLFilterDialog dialog = new CQLFilterDialog(shell, parentType, title, message); if (dialog.open() == CQLFilterDialog.OK) { return dialog.getFilter(); } return null; } }