// ============================================================================ // // Copyright (C) 2006-2016 Talend Inc. - www.talend.com // // This source code is available under agreement available at // %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt // // You should have received a copy of the agreement // along with this program; if not, write to Talend SA // 9 rue Pages 92150 Suresnes, France // // ============================================================================ package org.talend.cwm.compare.ui.actions; import java.util.Collection; import java.util.Iterator; import org.apache.log4j.Logger; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.TreePath; import org.eclipse.jface.viewers.TreeSelection; import org.eclipse.ui.IObjectActionDelegate; import org.eclipse.ui.IWorkbenchPart; import org.talend.commons.emf.EMFUtil; import org.talend.core.model.metadata.builder.connection.Connection; import org.talend.cwm.helper.ConnectionHelper; import org.talend.cwm.helper.SchemaHelper; import org.talend.cwm.management.api.FolderProvider; import org.talend.dq.writer.EMFSharedResources; import orgomg.cwm.objectmodel.core.ModelElement; import orgomg.cwm.resource.relational.Catalog; import orgomg.cwm.resource.relational.Schema; /** * DOC scorreia class global comment. Detailled comment */ @SuppressWarnings("deprecation") public class RefreshActionDelegate implements IObjectActionDelegate { protected static Logger log = Logger.getLogger(RefreshActionDelegate.class); protected static final EMFUtil EMFUTIL = EMFSharedResources.getSharedEmfUtil(); protected IWorkbenchPart workbenchpart; protected Object selectedObject; protected IFile selectedFileObject; protected Catalog selectedCatalog; protected Schema selectedSchema; protected Connection selectedDataProvider; private static final boolean CAT_WITH_PRV = true; @Override public void setActivePart(IAction action, IWorkbenchPart targetPart) { this.workbenchpart = targetPart; } @Override public void run(IAction action) { // synchronize(); } @SuppressWarnings("unused") private void synchronizeDirect() { EMFUtil util = EMFSharedResources.getSharedEmfUtil(); ResourceSet resourceSet = util.getResourceSet(); URI uri = URI.createPlatformResourceURI(selectedFileObject.getFullPath().toString(), false); final Resource resource = resourceSet.createResource(uri); Collection<? extends ModelElement> schemata = ConnectionHelper.getSchema(selectedDataProvider); if (CAT_WITH_PRV) { resource.getContents().addAll(schemata); } } // private void synchronize() { // // Load Model from Prv File // // Creates the resourceSet where we'll load the models // final ResourceSet resourceSet = new ResourceSetImpl(); // try { // final EObject alreadySavedModel = ModelUtils.load(selectedFileObject.toString(), resourceSet); // // Connection connection = null; // if (alreadySavedModel instanceof Connection) { // connection = (Connection) alreadySavedModel; // } // Connection newConn = null; // if (connection != null) { // String dbUrl = JavaSqlFactory.getURL(connection); // String driverClassName = JavaSqlFactory.getDriverClass(connection); // EList<EObject> pcObjects = connection.eContents(); // ListIterator<EObject> liEObject = pcObjects.listIterator(); // // Properties parameters = new Properties(); // // while (liEObject.hasNext()) { // EObject eo = liEObject.next(); // if (eo instanceof TaggedValue) { // String tag = ((TaggedValue) eo).getTag(); // System.out.print(tag); // String value = ((TaggedValue) eo).getValue(); // System.out.println(" " + value); //$NON-NLS-1$ // parameters.put(tag, value); // } // // } // // System.out.println(dbUrl); // System.out.println(driverClassName); // DBConnectionParameter dbcp = new DBConnectionParameter(); // // dbcp.setName(connection.getName()); // dbcp.setAuthor(MetadataHelper.getAuthor(connection)); // dbcp.setDescription(MetadataHelper.getDescription(connection)); // dbcp.setPurpose(MetadataHelper.getPurpose(connection)); // dbcp.setStatus(MetadataHelper.getDevStatus(connection)); // // dbcp.setDriverClassName(driverClassName); // dbcp.setJdbcUrl(dbUrl); // dbcp.setParameters(parameters); // IMetadataConnection metadataConnection = MetadataFillFactory.getDBInstance(connection).fillUIParams( // ParameterUtil.toMap(dbcp)); // newConn = MetadataFillFactory.getDBInstance(connection).fillUIConnParams(metadataConnection, null); // } // if (newConn == null) { // log.error(Messages.getString( // "RefreshActionDelegate.errorUnableCreateNewCon", connection == null ? "" : connection.getName()));//$NON-NLS-1$ //$NON-NLS-2$ // return; // } // // System.out.println(alreadySavedModel.toString()); // IFolder folder = ResourceManager.getConnectionFolder(); // FolderProvider fp = new FolderProvider(); // fp.setFolderResource(folder); // IFile file2 = loadDataProviderAndStructureInMemory(newConn, fp); // // final EObject model2 = ModelUtils.load(file2.toString(), resourceSet); // // // MODSCA 2008-03-31 add option for ignoring some elements // Map<String, Object> options = new HashMap<String, Object>(); // options.put(MatchOptions.OPTION_IGNORE_XMI_ID, true); // options.put(MatchOptions.OPTION_SEARCH_WINDOW, 500); // // // Creates the match then the diff model for those two models // final MatchModel match = MatchService.doMatch(alreadySavedModel, model2, options); // final DiffModel diff = DiffService.doDiff(match, false); // // EList<UnmatchElement> unMatchedElements = match.getUnmatchedElements(); // for (Object object : unMatchedElements) { // UnmatchElement unMatched = (UnmatchElement) object; // ModelElement modelElt = (ModelElement) unMatched.getElement(); // System.out.println("Unmatched elt= " + modelElt.getName()); //$NON-NLS-1$ // } // @SuppressWarnings("unused") // EList<DiffElement> ownedElements = diff.getOwnedElements(); // // // Prints the results // try { // System.out.println(ModelUtils.serialize(match)); // System.out.println(ModelUtils.serialize(diff)); // } catch (IOException e) { // log.error(e, e); // } // // // Serializes the result as "result.emfdiff" in the directory this // // class has been called from. // String outputFile = "out/result.emfdiff"; //$NON-NLS-1$ // System.out.println("saving emfdiff as \"" + outputFile + "\""); //$NON-NLS-1$ //$NON-NLS-2$ // final ComparisonResourceSnapshot snapshot = DiffFactory.eINSTANCE.createComparisonResourceSnapshot(); // snapshot.setDate(Calendar.getInstance().getTime()); // snapshot.setMatch(match); // snapshot.setDiff(diff); // // MOD scorreia 2010-01-29: we may need to set the file.encoding property here. // ModelUtils.save(snapshot, outputFile); // // } catch (IOException e) { // System.out.print(e.getMessage()); // // log.error(e, e); // } catch (InterruptedException e) { // System.out.print(e.getMessage()); // log.error(e, e); // } // } private IFile loadDataProviderAndStructureInMemory(Connection dataProvider, FolderProvider folderProvider) { IPath folderPath = ((folderProvider != null) && folderProvider.getFolder() != null) ? folderProvider.getFolderResource() .getFullPath() : null; if (folderPath == null) { // do not serialize data System.out.println("Data provider not serialized: no folder given."); //$NON-NLS-1$ return null; } // --- add resources in resource set EMFUtil util = EMFSharedResources.getSharedEmfUtil(); ResourceSet resourceSet = util.getResourceSet(); String fileName = ".refresh.prv"; //$NON-NLS-1$ IFile file = folderProvider == null ? null : folderProvider.getFolderResource().getFile(fileName); // File file = new File(dataproviderFilename); if (file != null && file.exists()) { try { file.delete(true, null); } catch (CoreException e) { log.error(e, e); } } URI uri = URI.createPlatformResourceURI(file.getFullPath().toString(), false); final Resource resource = resourceSet.createResource(uri); @SuppressWarnings("unused") boolean ok = resource.getContents().add(dataProvider); // save each catalog is its own file Collection<? extends ModelElement> catalogs = ConnectionHelper.getCatalogs(dataProvider); if (CAT_WITH_PRV) { ok = resource.getContents().addAll(catalogs); } else { // ok = addElementsToOwnResources(catalogs, // folderProvider.getFolderResource(), util); } // save each schema is its own file Collection<? extends ModelElement> schemata = ConnectionHelper.getSchema(dataProvider); if (CAT_WITH_PRV) { ok = resource.getContents().addAll(schemata); } else { // ok = addElementsToOwnResources(schemata, // folderProvider.getFolderResource(), util); // util.save(); } Iterator<? extends ModelElement> it = schemata.iterator(); while (it.hasNext()) { Schema tdschema = (Schema) it.next(); Collection<? extends ModelElement> tables = SchemaHelper.getTables(tdschema); ok = resource.getContents().addAll(tables); Collection<? extends ModelElement> views = SchemaHelper.getViews(tdschema); ok = resource.getContents().addAll(views); } EMFUtil.saveSingleResource(resource); return file; } @Override public void selectionChanged(IAction action, ISelection selection) { if (selection != null && selection instanceof TreeSelection) { TreeSelection ts = (TreeSelection) selection; TreePath[] treepaths = ts.getPaths(); if (treepaths.length >= 1) { int count = treepaths[0].getSegmentCount(); for (int i = 0; i < count; i++) { Object o = treepaths[0].getSegment(i); if (o instanceof IFile) { if (((IFile) o).getFileExtension().toLowerCase().equals("prv")) { //$NON-NLS-1$ selectedFileObject = (IFile) o; } } else if (o instanceof Schema) { selectedSchema = (Schema) o; } else if (o instanceof Catalog) { selectedCatalog = (Catalog) o; } else if (o instanceof Connection) { selectedDataProvider = (Connection) o; } } } selectedObject = ts.getFirstElement(); } } }