Skip to main content
summaryrefslogtreecommitdiffstats
blob: 0abcb355d877b7209dc6f5027a1ad2ff612b6ab9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/*******************************************************************************
 * Copyright (c) 2004 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.wst.command.internal.env.core.fragment;

import java.util.Arrays;
import java.util.List;
import java.util.Vector;

import org.eclipse.wst.command.internal.provisional.env.core.CommandFactory;


/**
  * This class implements a sequence of CommandFragments.
**/
public class SequenceFragment extends AbstractCommandFragment
{
  private List fragmentList_;

  protected SequenceFragment( SequenceFragment frag )
  {
  	super( frag.getCommandFactory(), frag.getId() );
  	
    fragmentList_ = new Vector();
    
    for( int index = 0; index < frag.fragmentList_.size(); index++ )
    {
      Object newFrag = ((CommandFragment)frag.fragmentList_.get(index)).clone();
      fragmentList_.add( newFrag );
    }
  }
  
  public SequenceFragment( CommandFragment[] fragments, 
						   CommandFactory    commandFactory, 
					       String            id  )
  {
  	super( commandFactory, id );
  	
    if( fragments != null )
    {
      fragmentList_ = Arrays.asList( fragments );
    }
    else
    {
      fragmentList_ = new Vector();
    }
  }
  
  public SequenceFragment()
  {
  	super( null, "" );
  	
  	fragmentList_ = new Vector();
  }

  /**
    * Appends a fragment to the sequence. 
  **/
  public void add( CommandFragment fragment )
  {
    fragmentList_.add( fragment );
  }
  
  /**
    * Makes a copy of the CommandFragment.
    *
    * @return returns a copy of this fragment.
  **/
  public Object clone()
  {
    return new SequenceFragment( this );
  }

  /** 
    * Gets the first child fragment for this fragment.
    *
    * @return returns the first child fragment for this fragment.  Returns
    * null when there is no first child.
  **/
  public CommandFragment getFirstSubFragment()
  {
    CommandFragment fragment = null;

    if( fragmentList_ == null || fragmentList_.size() == 0 )
    {
      fragment = null;
    }
    else
    {      
      fragment = (CommandFragment)( fragmentList_.get(0) );
    }

    return fragment;    
  }

  /**
    * Gets the next child fragment for this fragment.
    *
    * @return returns the next child fragment for this fragment.  Returns null
    * when there is no next child.
  **/
  public CommandFragment getNextSubFragment( CommandFragment fragment )
  {
    int index = fragmentList_.indexOf( fragment );

    if( index == -1 )
    {
      throw new IllegalArgumentException( "Fragment not found in sequence.");
    }
    else
    {
      index++;

      if( index >= fragmentList_.size() )
      {
        // There is nothing following this fragment so return null;
        return null;
      }
      else
      {
        // Return the next fragment.
        return (CommandFragment)(fragmentList_.get( index ));
      }
    }
  }	
}  

Back to the top