15f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/*
25f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more
35f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * contributor license agreements.  See the NOTICE file distributed with
45f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * this work for additional information regarding copyright ownership.
55f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0
65f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * (the "License"); you may not use this file except in compliance with
75f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * the License.  You may obtain a copy of the License at
85f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *
95f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *
115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  Unless required by applicable law or agreed to in writing, software
125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *
155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  See the License for the specific language governing permissions and
165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  limitations under the License.
175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/**
205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @author Vitaly A. Provodin
215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/**
245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Created on 04.02.2005
255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespackage org.apache.harmony.jpda.tests.framework;
275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport java.util.Iterator;
295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport java.util.LinkedList;
305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport java.util.List;
315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/**
335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * This class defines an interface to keep an information about all started
345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * debuggees.
355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <p>
365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * As a rule JPDA tests consist of two parts: the test that represents a
375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * part of the debugger-side application and the debuggee part. It is a good
385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * practice if the JPDA tests control debuggee's lifecycle (usually via JDWP
395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * channel), but in some cases it can not be done, for example because of
405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * product bugs.
415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <p>
425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * This class is aimed to be an additional facility to stop each debuggee
435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * activity if it can not be done by the test in the regular way via JDWP
445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * channel.
455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespublic class DebuggeeRegister {
475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    LinkedList<DebuggeeWrapper> registered = new LinkedList<DebuggeeWrapper>();
495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Registers started debuggee.
525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param debuggee <code>DebuggeeWrapper</code> of the new started
545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * debuggee to register
555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void register(DebuggeeWrapper debuggee) {
575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes       registered.add(debuggee);
585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Unregisters specified debuggee.
625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param debuggee <code>DebuggeeWrapper</code> of the debuggee to unregister
645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * returns true if debuggee was registered
655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public boolean unregister(DebuggeeWrapper debuggee) {
675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return registered.remove(debuggee);
685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns list of all registered DebuggeeWrappers.
725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return array of DebuggeeWrappers
745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public List getAllRegistered() {
765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return registered;
775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Stops each of registered DebuggeeWrappers by invoking DebuggeeWrapper.stop().
815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void stopAllRegistered() {
835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        for (Iterator iter = registered.iterator(); iter.hasNext(); ) {
845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            DebuggeeWrapper wrapper = (DebuggeeWrapper)iter.next();
855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            if (wrapper != null) {
865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                wrapper.stop();
875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            }
885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        registered.clear();
905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes}
92