/** Load the Database Info */ public DatabaseMeta loadDatabaseMeta(ObjectId id_database) throws KettleException { DatabaseMeta databaseMeta = new DatabaseMeta(); try { RowMetaAndData r = getDatabase(id_database); if (r != null) { ObjectId id_database_type = new LongObjectId( r.getInteger( KettleDatabaseRepository.FIELD_DATABASE_ID_DATABASE_TYPE, 0)); // con_type String dbTypeDesc = getDatabaseTypeCode(id_database_type); if (dbTypeDesc != null) { databaseMeta.setDatabaseInterface(DatabaseMeta.getDatabaseInterface(dbTypeDesc)); databaseMeta.setAttributes(new Properties()); // new attributes } databaseMeta.setObjectId(id_database); databaseMeta.setName(r.getString(KettleDatabaseRepository.FIELD_DATABASE_NAME, "")); ObjectId id_database_contype = new LongObjectId( r.getInteger( KettleDatabaseRepository.FIELD_DATABASE_ID_DATABASE_CONTYPE, 0)); // con_access databaseMeta.setAccessType( DatabaseMeta.getAccessType(getDatabaseConTypeCode(id_database_contype))); databaseMeta.setHostname( r.getString(KettleDatabaseRepository.FIELD_DATABASE_HOST_NAME, "")); databaseMeta.setDBName( r.getString(KettleDatabaseRepository.FIELD_DATABASE_DATABASE_NAME, "")); databaseMeta.setDBPort(r.getString(KettleDatabaseRepository.FIELD_DATABASE_PORT, "")); databaseMeta.setUsername(r.getString(KettleDatabaseRepository.FIELD_DATABASE_USERNAME, "")); databaseMeta.setPassword( Encr.decryptPasswordOptionallyEncrypted( r.getString(KettleDatabaseRepository.FIELD_DATABASE_PASSWORD, ""))); databaseMeta.setServername( r.getString(KettleDatabaseRepository.FIELD_DATABASE_SERVERNAME, "")); databaseMeta.setDataTablespace( r.getString(KettleDatabaseRepository.FIELD_DATABASE_DATA_TBS, "")); databaseMeta.setIndexTablespace( r.getString(KettleDatabaseRepository.FIELD_DATABASE_INDEX_TBS, "")); // Also, load all the properties we can find... final Collection<RowMetaAndData> attrs = repository.connectionDelegate.getDatabaseAttributes(id_database); for (RowMetaAndData row : attrs) { String code = row.getString(KettleDatabaseRepository.FIELD_DATABASE_ATTRIBUTE_CODE, ""); String attribute = row.getString(KettleDatabaseRepository.FIELD_DATABASE_ATTRIBUTE_VALUE_STR, ""); databaseMeta.getAttributes().put(code, Const.NVL(attribute, "")); } } return databaseMeta; } catch (KettleDatabaseException dbe) { throw new KettleException( "Error loading database connection from repository (id_database=" + id_database + ")", dbe); } }
/** Adapted from KettleDatabaseRepositoryDatabaseDelegate.saveDatabaseMeta */ protected boolean equals(DatabaseMeta databaseMeta, DatabaseMeta databaseMeta2) { if (!equals(databaseMeta.getName(), databaseMeta2.getName())) { return false; } else if (!equals(databaseMeta.getPluginId(), databaseMeta2.getPluginId())) { return false; } else if (!equals(databaseMeta.getAccessType(), databaseMeta2.getAccessType())) { return false; } else if (!equals(databaseMeta.getHostname(), databaseMeta2.getHostname())) { return false; } else if (!equals(databaseMeta.getDatabaseName(), databaseMeta2.getDatabaseName())) { return false; } else if (!equals( databaseMeta.getDatabasePortNumberString(), databaseMeta2.getDatabasePortNumberString())) { return false; } else if (!equals(databaseMeta.getUsername(), databaseMeta2.getUsername())) { return false; } else if (!equals(databaseMeta.getPassword(), databaseMeta2.getPassword())) { return false; } else if (!equals(databaseMeta.getServername(), databaseMeta2.getServername())) { return false; } else if (!equals(databaseMeta.getDataTablespace(), databaseMeta2.getDataTablespace())) { return false; } else if (!equals(databaseMeta.getIndexTablespace(), databaseMeta2.getIndexTablespace())) { return false; } Map<Object, Object> databaseMeta2Attributes = new HashMap<Object, Object>(databaseMeta2.getAttributes()); for (Entry<Object, Object> databaseMetaEntry : new HashMap<Object, Object>(databaseMeta.getAttributes()).entrySet()) { Object value = databaseMeta2Attributes.remove(databaseMetaEntry.getKey()); if (!equals(value, databaseMetaEntry.getValue())) { return false; } } if (databaseMeta2Attributes.size() > 0) { return false; } return true; }
/** * Saves the database information into a given repository. * * @param databaseMeta The database metadata object to store * @throws KettleException if an error occurs. */ public void saveDatabaseMeta(DatabaseMeta databaseMeta) throws KettleException { try { // If we don't have an ID, we don't know which entry in the database we need to update. // See if a database with the same name is already available... if (databaseMeta.getObjectId() == null) { databaseMeta.setObjectId(getDatabaseID(databaseMeta.getName())); } // Still not found? --> Insert if (databaseMeta.getObjectId() == null) { // Insert new Note in repository // databaseMeta.setObjectId( insertDatabase( databaseMeta.getName(), databaseMeta.getPluginId(), DatabaseMeta.getAccessTypeDesc(databaseMeta.getAccessType()), databaseMeta.getHostname(), databaseMeta.getDatabaseName(), databaseMeta.getDatabasePortNumberString(), databaseMeta.getUsername(), databaseMeta.getPassword(), databaseMeta.getServername(), databaseMeta.getDataTablespace(), databaseMeta.getIndexTablespace())); } else { // --> found entry with the same name... // Update the note... updateDatabase( databaseMeta.getObjectId(), databaseMeta.getName(), databaseMeta.getPluginId(), DatabaseMeta.getAccessTypeDesc(databaseMeta.getAccessType()), databaseMeta.getHostname(), databaseMeta.getDatabaseName(), databaseMeta.getDatabasePortNumberString(), databaseMeta.getUsername(), databaseMeta.getPassword(), databaseMeta.getServername(), databaseMeta.getDataTablespace(), databaseMeta.getIndexTablespace()); } // For the extra attributes, just delete them and re-add them. delDatabaseAttributes(databaseMeta.getObjectId()); // OK, now get a list of all the attributes set on the database connection... // Properties attributes = databaseMeta.getAttributes(); Enumeration<Object> keys = databaseMeta.getAttributes().keys(); while (keys.hasMoreElements()) { String code = (String) keys.nextElement(); String attribute = (String) attributes.get(code); // Save this attribute // insertDatabaseAttribute(databaseMeta.getObjectId(), code, attribute); } } catch (KettleDatabaseException dbe) { throw new KettleException( "Error saving database connection or one of its attributes to the repository.", dbe); } }