/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.xsd.ui; import java.util.List; import java.util.Map; import org.eclipse.core.runtime.IStatus; import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.window.Window; import org.eclipse.swt.widgets.Display; import org.eclipse.xsd.impl.XSDSchemaImpl; import org.teiid.core.designer.ModelerCoreException; import org.teiid.core.designer.util.CoreArgCheck; import org.teiid.designer.core.ModelInitializer; import org.teiid.designer.core.metamodel.MetamodelDescriptor; import org.teiid.designer.core.util.INewModelObjectHelper; import org.teiid.designer.ui.UiConstants; import org.teiid.designer.ui.viewsupport.ModelInitializerSelectionDialog; import org.teiid.designer.ui.viewsupport.ModelUtilities; /** * @since 8.0 */ public class XsdSchemaUiNewModelObjectHelper implements INewModelObjectHelper { /** * * @since 4.3 */ public XsdSchemaUiNewModelObjectHelper() { super(); } /** * @see org.teiid.designer.core.util.INewModelObjectHelper#canHelpCreate(java.lang.Object) * @since 4.3 */ @Override public boolean canHelpCreate(Object newObject) { CoreArgCheck.isNotNull(newObject); if(newObject instanceof XSDSchemaImpl) { return true; } return false; } /** * @see org.teiid.designer.core.util.INewModelObjectHelper#helpCreate(java.lang.Object, Map) * @since 4.3 */ @Override public boolean helpCreate(Object newObject, Map properties, List<EObject> references) throws ModelerCoreException { XSDSchemaImpl xsdSchemaImpl = (XSDSchemaImpl) newObject; MetamodelDescriptor descriptor = ModelUtilities.getModelResourceForModelObject(xsdSchemaImpl).getPrimaryMetamodelDescriptor(); if (descriptor != null) { final List initializerNames = descriptor.getModelInitializerNames(); final int numInitializers = initializerNames.size(); String initializerName = null; if ( numInitializers == 1 ) { // Only one, so choose it ... initializerName = (String) initializerNames.get(0); } else if ( numInitializers > 1 ) { // More than one, so give choice to users ... ModelInitializerSelectionDialog dialog = new ModelInitializerSelectionDialog(Display.getCurrent().getActiveShell(), descriptor); dialog.setInitialSelection(); dialog.open(); if ( dialog.getReturnCode() == Window.OK && dialog.getResult() != null && dialog.getResult().length > 0 ) { initializerName = (String) dialog.getResult()[0]; } else { // can't cancel, so just use the first one initializerName = (String) initializerNames.get(0); } } if ( initializerName != null ) { // Run the initializer ... final ModelInitializer initializer = descriptor.getModelInitializer(initializerName); if ( initializer != null ) { try { initializer.execute(xsdSchemaImpl.eResource()); } catch (Exception e) { UiConstants.Util.log(IStatus.ERROR, e, e.getMessage()); } } } } return true; } }