/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.directory.studio.ldapbrowser.ui.wizards;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;
import org.apache.directory.studio.connection.core.Connection;
import org.apache.directory.studio.connection.core.ConnectionCorePlugin;
import org.apache.directory.studio.connection.core.ConnectionFolder;
import org.apache.directory.studio.connection.core.ConnectionFolderManager;
import org.apache.directory.studio.connection.core.ConnectionManager;
import org.apache.directory.studio.connection.core.ConnectionParameter;
import org.apache.directory.studio.connection.core.io.ConnectionIO;
import org.apache.directory.studio.connection.core.io.ConnectionIOException;
import org.apache.directory.studio.ldapbrowser.core.BrowserConnectionIO;
import org.apache.directory.studio.ldapbrowser.core.model.IBrowserConnection;
import org.apache.directory.studio.ldapbrowser.core.model.impl.BrowserConnection;
import org.apache.directory.studio.ldapbrowser.ui.BrowserUIConstants;
import org.eclipse.swt.widgets.Composite;
/**
* This class implements the Wizard for Importing connections.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$, $Date$
*/
public class ImportConnectionsWizard extends ExportBaseWizard
{
/** The wizard page */
private ImportConnectionsWizardPage page;
/**
* Creates a new instance of ImportConnectionsWizard.
*/
public ImportConnectionsWizard()
{
super( Messages.getString( "ImportConnectionsWizard.ConnectionsImport" ) ); //$NON-NLS-1$
}
/**
* Gets the ID of the Import Connections Wizard
*
* @return The ID of the Import Connections Wizard
*/
public static String getId()
{
return BrowserUIConstants.WIZARD_IMPORT_CONNECTIONS;
}
/**
* {@inheritDoc}
*/
public void addPages()
{
page = new ImportConnectionsWizardPage();
addPage( page );
}
/**
* {@inheritDoc}
*/
public void createPageControls( Composite pageContainer )
{
super.createPageControls( pageContainer );
// set help context ID
// PlatformUI.getWorkbench().getHelpSystem().setHelp( fromPage.getControl(),
// BrowserUIPlugin.PLUGIN_ID + "." + "tools_ldifexport_wizard" );
//TODO: Add Help Context
}
/**
* {@inheritDoc}
*/
public boolean performFinish()
{
page.saveDialogSettings();
String importFileName = page.getImportFileName();
try
{
ZipFile importFile = new ZipFile( new File( importFileName ) );
// Loading the Connections
ZipEntry connectionsEntry = importFile.getEntry( "connections.xml" ); //$NON-NLS-1$
if ( connectionsEntry != null )
{
InputStream connectionsInputStream = importFile.getInputStream( connectionsEntry );
ConnectionManager connectionManager = ConnectionCorePlugin.getDefault().getConnectionManager();
Set<ConnectionParameter> connectionParametersSet = ConnectionIO.load( connectionsInputStream );
for ( ConnectionParameter connectionParameter : connectionParametersSet )
{
connectionManager.addConnection( new Connection( connectionParameter ) );
}
}
// Loading the ConnectionFolders
ZipEntry connectionFoldersEntry = importFile.getEntry( "connectionFolders.xml" ); //$NON-NLS-1$
ConnectionFolder rootConnectionFolder = null;
if ( connectionFoldersEntry != null )
{
InputStream connectionFoldersInputStream = importFile.getInputStream( connectionFoldersEntry );
ConnectionFolderManager connectionFolderManager = ConnectionCorePlugin.getDefault()
.getConnectionFolderManager();
Set<ConnectionFolder> connectionFoldersSet = ConnectionIO
.loadConnectionFolders( connectionFoldersInputStream );
for ( ConnectionFolder connectionFolder : connectionFoldersSet )
{
if ( !"0".equals( connectionFolder.getId() ) ) //$NON-NLS-1$
{
connectionFolderManager.addConnectionFolder( connectionFolder );
}
else
{
rootConnectionFolder = connectionFolder;
}
}
// Root ConnectionFolder must be the last one to be loaded
if ( rootConnectionFolder != null )
{
ConnectionFolder realRootConnectionFolder = connectionFolderManager.getRootConnectionFolder();
// Adding subfolders
List<String> realSubFolderIds = realRootConnectionFolder.getSubFolderIds();
for ( String subFolderId : rootConnectionFolder.getSubFolderIds() )
{
if ( !realSubFolderIds.contains( subFolderId ) )
{
realRootConnectionFolder.addSubFolderId( subFolderId );
}
}
// Adding connections
List<String> realConnectionIds = realRootConnectionFolder.getConnectionIds();
for ( String connectionId : rootConnectionFolder.getConnectionIds() )
{
if ( !realConnectionIds.contains( connectionId ) )
{
realRootConnectionFolder.addConnectionId( connectionId );
}
}
}
}
// Loading the BrowserConnections
ZipEntry browserConnectionsEntry = importFile.getEntry( "browserconnections.xml" ); //$NON-NLS-1$
if ( browserConnectionsEntry != null )
{
InputStream browserConnectionsInputStream = importFile.getInputStream( browserConnectionsEntry );
Connection[] connections = ConnectionCorePlugin.getDefault().getConnectionManager().getConnections();
Map<String, IBrowserConnection> connectionsMap = new HashMap<String, IBrowserConnection>();
for ( int i = 0; i < connections.length; i++ )
{
Connection connection = connections[i];
BrowserConnection browserConnection = new BrowserConnection( connection );
connectionsMap.put( connection.getId(), browserConnection );
}
BrowserConnectionIO.load( browserConnectionsInputStream, connectionsMap );
}
}
catch ( ZipException e )
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch ( IOException e )
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch ( ConnectionIOException e )
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return true;
}
}