/* * 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.transformation.ui.wizards.xmlfile; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.swt.widgets.Shell; import org.teiid.core.designer.ModelerCoreException; import org.teiid.core.designer.util.StringConstants; import org.teiid.core.designer.util.StringUtilities; import org.teiid.designer.core.workspace.ModelResource; import org.teiid.designer.core.workspace.ModelWorkspaceException; import org.teiid.designer.core.workspace.ModelWorkspaceItem; import org.teiid.designer.core.workspace.ModelWorkspaceManager; import org.teiid.designer.datatools.connection.ConnectionInfoHelper; import org.teiid.designer.datatools.connection.IConnectionInfoProvider; import org.teiid.designer.datatools.profiles.ws.IWSProfileConstants; import org.teiid.designer.datatools.profiles.ws.WSConnectionInfoProvider; import org.teiid.designer.datatools.profiles.xml.XmlFileConnectionInfoProvider; import org.teiid.designer.datatools.profiles.xml.XmlUrlConnectionInfoProvider; import org.teiid.designer.transformation.ui.wizards.file.FlatFileRelationalModelFactory; import org.teiid.designer.transformation.ui.wizards.file.TeiidMetadataImportInfo; import org.teiid.designer.transformation.ui.wizards.file.TeiidMetadataImportProcessor; import org.teiid.designer.ui.editors.ModelEditor; import org.teiid.designer.ui.editors.ModelEditorManager; /** * @since 8.0 */ public class TeiidXmlFileImportProcessor extends TeiidMetadataImportProcessor { public TeiidXmlFileImportProcessor(TeiidMetadataImportInfo info, Shell shell) { super(info, shell); } @Override protected ModelResource createViewsInExistingModel(String relationalModelName) throws ModelerCoreException { if( getInfo().getViewModelLocation() != null && getInfo().getViewModelName() != null ) { IPath modelPath = getInfo().getViewModelLocation().append(getInfo().getViewModelName()); if( !modelPath.toString().toUpperCase().endsWith(".XMI")) { //$NON-NLS-1$ modelPath = modelPath.addFileExtension("xmi"); //$NON-NLS-1$ } ModelWorkspaceItem item = ModelWorkspaceManager.getModelWorkspaceManager().findModelWorkspaceItem(modelPath, IResource.FILE); ModelEditor editor = ModelEditorManager.getModelEditorForFile( (IFile)item.getCorrespondingResource(), true); if (editor != null) { boolean isDirty = editor.isDirty(); XmlFileViewModelFactory factory = new XmlFileViewModelFactory(); for( TeiidXmlFileInfo info : this.getInfo().getXmlFileInfos()) { if( info.doProcess() ) { if (info.getViewProcedureName() != null && !info.getViewProcedureName().equals(StringConstants.EMPTY_STRING)) { factory.createViewProcedure(editor.getModelResource(), info, relationalModelName); }else{ factory.createViewTable(editor.getModelResource(), info, relationalModelName); } } } editor.getModelResource().save(null, true); if (!isDirty && editor.isDirty()) { editor.doSave(new NullProgressMonitor()); } return editor.getModelResource(); } } return null; } /** * Create Views. The source Model Name is passed in for use in the transformation SQL * * @param sourceModelName the name of the source model {@inheritDoc} * @see org.teiid.designer.transformation.ui.wizards.file.TeiidMetadataImportProcessor#createViewsInNewModel(java.lang.String) */ @Override protected ModelResource createViewsInNewModel(String sourceModelName) throws ModelerCoreException { XmlFileViewModelFactory factory = new XmlFileViewModelFactory(); // View Model Name String viewModelName = this.getInfo().getViewModelName(); if (!viewModelName.toLowerCase().endsWith(DEFAULT_EXTENSION_LCASE)) { viewModelName = viewModelName + DEFAULT_EXTENSION_LCASE; } // Create the View Model, at the specified location ModelResource modelResource = factory.createViewRelationalModel(this.getInfo().getViewModelLocation(), viewModelName); // Create View Tables in the model for( TeiidXmlFileInfo info : this.getInfo().getXmlFileInfos()) { if( info.doProcess() ) { factory.createViewTable(modelResource, info, sourceModelName); } } return modelResource; } @Override protected void addConnectionProfileInfoToModel(ModelResource sourceModel, TeiidMetadataImportInfo info) throws ModelWorkspaceException { // Inject the connection profile info into the model if (info.getConnectionProfile() != null) { IConnectionInfoProvider provider = null; if( getInfo().isXmlLocalFileMode() ) { provider = new XmlFileConnectionInfoProvider(); } else if( getInfo().isXmlUrlFileMode() ) { if( IWSProfileConstants.TEIID_WS_CONNECTION_PROFILE_ID.equalsIgnoreCase(info.getConnectionProfile().getProviderId()) ) { provider = new WSConnectionInfoProvider(); } else { provider = new XmlUrlConnectionInfoProvider(); } } if( provider != null ) { provider.setConnectionInfo(sourceModel, info.getConnectionProfile()); } String jndiName = info.getJBossJndiName(); if( !StringUtilities.isEmpty(jndiName) ) { ConnectionInfoHelper helper = new ConnectionInfoHelper(); helper.setJNDIName(sourceModel, jndiName); } } } /** * Override method to create the 'invokeHttp' procedure */ @Override protected ModelResource addProcedureToRelationalSourceModel() throws ModelerCoreException { if( getInfo().isXmlLocalFileMode() ) { return super.addProcedureToRelationalSourceModel(); } if( getInfo().getSourceModelLocation() != null && getInfo().getSourceModelName() != null ) { IPath modelPath = getInfo().getSourceModelLocation().append(getInfo().getSourceModelName()); if( !modelPath.toString().toUpperCase().endsWith(".XMI")) { //$NON-NLS-1$ modelPath = modelPath.addFileExtension("xmi"); //$NON-NLS-1$ } ModelWorkspaceItem item = ModelWorkspaceManager.getModelWorkspaceManager().findModelWorkspaceItem(modelPath, IResource.FILE); ModelEditor editor = ModelEditorManager.getModelEditorForFile( (IFile)item.getCorrespondingResource(), true); if (editor != null) { ModelResource mr = editor.getModelResource(); boolean isDirty = editor.isDirty(); FlatFileRelationalModelFactory factory = new FlatFileRelationalModelFactory(); factory.addMissingProcedure(mr, FlatFileRelationalModelFactory.INVOKE_HTTP); mr.save(null, true); if (!isDirty && editor.isDirty()) { editor.doSave(new NullProgressMonitor()); } return mr; } } return null; } }