/*! ****************************************************************************** * * Pentaho Data Integration * * Copyright (C) 2002-2013 by Pentaho : http://www.pentaho.com * ******************************************************************************* * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ******************************************************************************/ package org.pentaho.di.starmodeler; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.pentaho.di.core.database.DatabaseMeta; import org.pentaho.di.core.exception.KettleException; import org.pentaho.di.core.exception.KettleObjectExistsException; import org.pentaho.di.core.logging.LogChannel; import org.pentaho.di.metastore.DatabaseMetaStoreUtil; import org.pentaho.di.shared.SharedObjectInterface; import org.pentaho.di.shared.SharedObjects; import org.pentaho.di.ui.core.dialog.ErrorDialog; import org.pentaho.di.ui.spoon.Spoon; import org.pentaho.metastore.api.IMetaStore; public class SharedDatabaseUtil { /** * Add a database to the list of shared databases in ~/.kettle/shared.xml * * @param databaseMeta * @throws KettleException in case there is an error * @throws KettleObjectExistsException if a database with the same name already exists */ public static void addSharedDatabase(DatabaseMeta databaseMeta) throws KettleObjectExistsException, KettleException { // First verify existence... // List<DatabaseMeta> sharedDatabases = loadSharedDatabases(); DatabaseMeta found = DatabaseMeta.findDatabase(sharedDatabases, databaseMeta.getName()); if (found!=null) { throw new KettleObjectExistsException("A database with name '"+databaseMeta.getName()+"' already exists in the shared databases list."); } try { SharedObjects sharedObjects = new SharedObjects(); sharedObjects.storeObject(databaseMeta); sharedObjects.saveToFile(); } catch(Exception e) { throw new KettleException("It was not possible to add database '"+databaseMeta.getName()+"' to the shared.xml file"); } } public static List<DatabaseMeta> getDatabaseMetaList(IMetaStore metaStore) { try { return DatabaseMetaStoreUtil.getDatabaseElements(metaStore); } catch(Exception e) { new ErrorDialog(Spoon.getInstance().getShell(), "Error retrieving databases", "There was an error retrieving database from the MetaStore", e); return new ArrayList<DatabaseMeta>(); // empty list. } } public static List<DatabaseMeta> loadSharedDatabases() { List<DatabaseMeta> sharedDatabases= new ArrayList<DatabaseMeta>(); try { SharedObjects sharedObjects = new SharedObjects(); for (SharedObjectInterface sharedObject : sharedObjects.getObjectsMap().values()) { if (sharedObject instanceof DatabaseMeta) { sharedDatabases.add((DatabaseMeta) sharedObject); } } } catch(Exception e) { LogChannel.GENERAL.logError("Unable to load shared objects", e); } return sharedDatabases; } public static String[] getSortedDatabaseNames(List<DatabaseMeta> sharedDatabases) { String[] databaseNames = new String[sharedDatabases.size()]; for (int i=0;i<sharedDatabases.size();i++) databaseNames[i] = sharedDatabases.get(i).getName(); Arrays.sort(databaseNames); return databaseNames; } }