/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Copyright @ 2015 Atlassian Pty Ltd
*
* 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 net.java.sip.communicator.slick.protocol.jabber;
import java.util.*;
import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.slick.protocol.generic.*;
import net.java.sip.communicator.util.*;
import org.osgi.framework.*;
/**
* Implementation for generic file transfer.
* @author Damian Minkov
*/
public class TestOperationSetFileTransferImpl
extends TestOperationSetFileTransfer
{
private static final Logger logger =
Logger.getLogger(TestOperationSetFileTransferImpl.class);
private JabberSlickFixture fixture = new JabberSlickFixture();
private OperationSetPresence opSetPresence1 = null;
private OperationSetPresence opSetPresence2 = null;
private OperationSetFileTransfer opSetFT1 = null;
private OperationSetFileTransfer opSetFT2 = null;
private static Contact contact1 = null;
private static Contact contact2 = null;
@Override
public Contact getContact1()
{
if(contact1 == null)
{
contact1 = opSetPresence1.findContactByID(fixture.userID2);
}
return contact1;
}
@Override
public Contact getContact2()
{
if(contact2 == null)
{
contact2 = opSetPresence2.findContactByID(fixture.userID1);
}
return contact2;
}
@Override
public void start()
throws Exception
{
fixture.setUp();
Map<String, OperationSet> supportedOperationSets1 =
fixture.provider1.getSupportedOperationSets();
if ( supportedOperationSets1 == null
|| supportedOperationSets1.size() < 1)
throw new NullPointerException(
"No OperationSet implementations are supported by "
+"this implementation. ");
//we also need the presence op set in order to retrieve contacts.
opSetPresence1 =
(OperationSetPresence)supportedOperationSets1.get(
OperationSetPresence.class.getName());
//if the op set is null show that we're not happy.
if (opSetPresence1 == null)
{
throw new NullPointerException(
"An implementation of the service must provide an "
+ "implementation of at least one of the PresenceOperationSets");
}
opSetFT1 =
(OperationSetFileTransfer)supportedOperationSets1.get(
OperationSetFileTransfer.class.getName());
//if the op set is null show that we're not happy.
if (opSetFT1 == null)
{
throw new NullPointerException(
"An implementation of the service must provide an "
+ "implementation of at least one of the FileTransferOperationSets");
}
Map<String, OperationSet> supportedOperationSets2 =
fixture.provider2.getSupportedOperationSets();
if ( supportedOperationSets2 == null
|| supportedOperationSets2.size() < 1)
throw new NullPointerException(
"No OperationSet implementations are supported by "
+"this implementation. ");
opSetPresence2 =
(OperationSetPresence) supportedOperationSets2.get(
OperationSetPresence.class.getName());
//if the op set is null show that we're not happy.
if (opSetPresence2 == null)
{
throw new NullPointerException(
"An implementation of the service must provide an "
+ "implementation of at least one of the PresenceOperationSets");
}
opSetFT2 =
(OperationSetFileTransfer)supportedOperationSets2.get(
OperationSetFileTransfer.class.getName());
//if the op set is null show that we're not happy.
if (opSetFT2 == null)
{
throw new NullPointerException(
"An implementation of the service must provide an "
+ "implementation of at least one of the FileTransferOperationSets");
}
prepareContactList();
}
@Override
public void stop()
throws Exception
{
fixture.tearDown();
}
/**
* Create the list to be sure that contacts exchanging messages
* exists in each other lists
* @throws Exception
*/
public void prepareContactList()
throws Exception
{
// clear the provider the first time we run a filetransfer list
if(getContact1() == null && getContact2() == null)
fixture.clearProvidersLists();
if(getContact1() == null)
{
Object o = new Object();
synchronized(o)
{
o.wait(2000);
}
try
{
opSetPresence1.setAuthorizationHandler(new AuthHandler());
opSetPresence1.subscribe(fixture.userID2);
}
catch (OperationFailedException ex)
{
// the contact already exist its OK
}
}
if(getContact2() == null)
{
try
{
opSetPresence2.setAuthorizationHandler(new AuthHandler());
opSetPresence2.subscribe(fixture.userID1);
}
catch (OperationFailedException ex1)
{
// the contact already exist its OK
}
logger.info("will wait till the list prepare is completed");
Object o = new Object();
synchronized(o)
{
o.wait(4000);
}
}
}
@Override
public OperationSetFileTransfer getOpSetFilTransfer1()
{
return opSetFT1;
}
@Override
public OperationSetFileTransfer getOpSetFilTransfer2()
{
return opSetFT2;
}
@Override
public BundleContext getContext()
{
return JabberSlickFixture.bc;
}
@Override
public boolean enableTestSendAndReceive()
{
return true;
}
/**
* Its not implemented and its not available in jabber.
* @return
*/
@Override
public boolean enableTestSenderCancelBeforeAccepted()
{
return false;
}
@Override
public boolean enableTestReceiverDecline()
{
return true;
}
/**
* It deleivers Failed event to receiver but it must deliver
* canceled.
* @return
*/
@Override
public boolean enableTestReceiverCancelsWhileTransfering()
{
return false;
}
@Override
public boolean enableTestSenderCancelsWhileTransfering()
{
return true;
}
}