Java tutorial
// ============================================================================ // // Copyright (C) 2006-2015 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.metadata.managment.model; import java.io.ByteArrayInputStream; import java.io.File; import java.io.UnsupportedEncodingException; import java.rmi.RemoteException; import java.sql.DatabaseMetaData; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.time.DateFormatUtils; import org.apache.log4j.Logger; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.talend.commons.utils.data.list.ListUtils; import org.talend.core.model.metadata.IMetadataConnection; import org.talend.core.model.metadata.builder.connection.Connection; import org.talend.core.model.metadata.builder.connection.MDMConnection; import org.talend.core.model.metadata.builder.connection.MetadataTable; import org.talend.cwm.constants.SoftwareSystemConstants; import org.talend.cwm.helper.ConnectionHelper; import org.talend.cwm.relational.TdTable; import org.talend.cwm.softwaredeployment.SoftwaredeploymentFactory; import org.talend.cwm.softwaredeployment.TdSoftwareSystem; import org.talend.cwm.xml.TdXmlSchema; import org.talend.cwm.xml.XmlFactory; import org.talend.mdm.webservice.WSDataModelPK; import org.talend.mdm.webservice.WSGetDataModel; import org.talend.mdm.webservice.WSRegexDataModelPKs; import org.talend.mdm.webservice.XtentisBindingStub; import org.talend.mdm.webservice.XtentisPort_PortType; import org.talend.metadata.managment.utils.DatabaseConstant; import org.talend.metadata.managment.utils.MetadataConnectionUtils; import org.talend.model.bridge.ReponsitoryContextBridge; import org.talend.utils.sugars.ReturnCode; import orgomg.cwm.foundation.softwaredeployment.Component; import orgomg.cwm.objectmodel.core.Package; import orgomg.cwm.resource.relational.Catalog; import orgomg.cwm.resource.relational.Schema; /** * @author zshen * */ public class MDMConnectionFillerImpl extends MetadataFillerImpl<MDMConnection> { private static Logger log = Logger.getLogger(MDMConnectionFillerImpl.class); @Override public MDMConnection fillUIConnParams(IMetadataConnection metadataBean, MDMConnection connection) { MDMConnection mdmConn = connection; if (mdmConn == null) { mdmConn = ConnectionHelper.createMDMConnection(metadataBean.getDataSourceName()); } if (super.fillUIConnParams(metadataBean, mdmConn) == null) { return null; } ReturnCode rc = checkConnection(metadataBean); if (rc.isOk()) { // create softwareSystem TdSoftwareSystem softwareSystem = SoftwaredeploymentFactory.eINSTANCE.createTdSoftwareSystem(); softwareSystem.setName(metadataBean.getDatabase()); // system.setSubtype(databaseProductName); softwareSystem.setType(SoftwareSystemConstants.DBMS.toString()); softwareSystem.setVersion(metadataBean.getVersion()); Component component = orgomg.cwm.foundation.softwaredeployment.SoftwaredeploymentFactory.eINSTANCE .createComponent(); softwareSystem.getOwnedElement().add(component); ConnectionHelper.setSoftwareSystem(connection, softwareSystem); // set dataprovider ConnectionHelper.setDataFilter(metadataBean.getDatafilter(), mdmConn); ConnectionHelper.setUniverse(metadataBean.getUniverse(), connection); // fill some base parameter fillMetadataParams(metadataBean, connection); // initialize database driver } return connection; } public List<orgomg.cwm.objectmodel.core.Package> fillSchemas(MDMConnection mdmConn, DatabaseMetaData dbJDBCMetadata, List<String> schemaFilter) { List<TdXmlSchema> xmlDocs = new ArrayList<TdXmlSchema>(); try { XtentisBindingStub stub = MetadataConnectionUtils.getXtentisBindingStub(mdmConn); WSDataModelPK[] pks = stub.getDataModelPKs(new WSRegexDataModelPKs(StringUtils.EMPTY)); String techXSDFolderName = getTechXSDFolderName(); for (WSDataModelPK pk : pks) { if (isCreateElement(schemaFilter, pk.getPk())) { adaptToCWMDocument(xmlDocs, stub, pk.getPk(), techXSDFolderName, mdmConn); } } } catch (Exception e) { log.error(e, e); } ConnectionHelper.addXMLDocuments(xmlDocs); return ListUtils.castList(orgomg.cwm.objectmodel.core.Package.class, xmlDocs); } private String getTechXSDFolderName() { String techXSDFolderName = MetadataConnectionUtils.createTechnicalName( DatabaseConstant.XSD_SUFIX + DateFormatUtils.format(new Date(), "yyyyMMddHHmmss")); //$NON-NLS-1$ IFolder xsdFolder = ReponsitoryContextBridge.getRootProject() .getFolder(new Path("metadata/MDMconnections")); //$NON-NLS-1$ // ResourceManager.getMDMConnectionFolder().getFolder(DatabaseConstant.XSD_SUFIX); if (xsdFolder.getFolder(techXSDFolderName).exists()) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } return getTechXSDFolderName(); } return techXSDFolderName; } /** * DOC xqliu Comment method "adaptToCWMDocument". * * @param xmlDocCollection * @param stub * @param resName * @param providerTechName * @param dataProvider * @throws RemoteException * @throws CoreException */ private void adaptToCWMDocument(List<TdXmlSchema> xmlDocCollection, XtentisPort_PortType stub, String resName, String providerTechName, Connection dataProvider) throws RemoteException, CoreException { // MOD xqliu 2010-10-18 bug 16161 String resXSD = null; try { resXSD = stub.getDataModel(new WSGetDataModel(new WSDataModelPK(resName))).getXsdSchema(); } catch (Exception e1) { log.warn(e1, e1); } if (resXSD == null || StringUtils.EMPTY.equals(resXSD.trim())) { log.warn("XSD not exist for \"" + resName + "\""); //$NON-NLS-1$ //$NON-NLS-2$ return; } // ~ 16161 // Save xsd file to local disk. // TODO Specify unique xsd file name. IFolder xsdFolder = ReponsitoryContextBridge.getRootProject().getFolder(new Path("metadata/MDMconnections")) //$NON-NLS-1$ .getFolder(DatabaseConstant.XSD_SUFIX); if (!xsdFolder.exists()) { xsdFolder.create(true, true, new NullProgressMonitor()); } xsdFolder = xsdFolder.getFolder(providerTechName); if (!xsdFolder.exists()) { xsdFolder.create(true, true, new NullProgressMonitor()); } IFile file = xsdFolder.getFile(resName + DatabaseConstant.XSD_SUFIX); // zshen bug 14089: unfolder MDM node get exception.because of the encoding of stream try { file.create(new ByteArrayInputStream(resXSD.getBytes("UTF-8")), true, new NullProgressMonitor()); //$NON-NLS-1$ } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } // ~14089 TdXmlSchema tdXmlDoc = XmlFactory.eINSTANCE.createTdXmlSchema(); tdXmlDoc.setName(resName); // TODO Specify unique xsd file name. tdXmlDoc.setXsdFilePath(DatabaseConstant.XSD_SUFIX + File.separator + xsdFolder.getName() + File.separator + file.getName()); tdXmlDoc.getDataManager().add(dataProvider); xmlDocCollection.add(tdXmlDoc); } public List<Catalog> fillCatalogs(MDMConnection dbConn, DatabaseMetaData dbJDBCMetadata, List<String> catalogFilter) { // TODO Auto-generated method stub return null; } public List<Catalog> fillCatalogs(MDMConnection dbConn, DatabaseMetaData dbJDBCMetadata, IMetadataConnection metaConnection, List<String> catalogFilter) { // TODO Auto-generated method stub return null; } public List<TdTable> fillTables(Package pack, DatabaseMetaData dbJDBCMetadata, List<String> tableFilter, String tablePattern, String[] tableType) { // TODO Auto-generated method stub return null; } public List<Schema> fillSchemaToCatalog(MDMConnection dbConn, DatabaseMetaData dbJDBCMetadata, Catalog catalog, List<String> schemaFilter) { // TODO Auto-generated method stub return null; } public List<MetadataTable> fillAll(Package pack, DatabaseMetaData dbJDBCMetadata, List<String> tableFilter, String tablePattern, String[] tableType) { // TODO Auto-generated method stub return null; } /* * (non-Javadoc) * * @see org.talend.core.model.metadata.IMetadataFiller#fillAll(orgomg.cwm.objectmodel.core.Package, * java.sql.DatabaseMetaData, org.talend.core.model.metadata.IMetadataConnection, java.util.List, java.lang.String, * java.lang.String[]) */ public List<MetadataTable> fillAll(Package pack, DatabaseMetaData dbJDBCMetadata, IMetadataConnection metaConnection, List<String> tableFilter, String tablePattern, String[] tableType) { // TODO Auto-generated method stub return null; } /* * (non-Javadoc) * * @see * org.talend.core.model.metadata.IMetadataFiller#fillSchemas(org.talend.core.model.metadata.builder.connection. * Connection, java.sql.DatabaseMetaData, org.talend.core.model.metadata.IMetadataConnection, java.util.List) */ public List<Package> fillSchemas(MDMConnection dbConn, DatabaseMetaData dbJDBCMetadata, IMetadataConnection metaConnection, List<String> Filter) { // TODO Auto-generated method stub return null; } }