View Javadoc

1   /*
2    * This file is a part of CAST project.
3    * (c) Copyright 2007, AGH University of Science & Technology
4    * https://caribou.iisg.agh.edu.pl/trac/cast
5    *
6    * Licensed under the Eclipse Public License, Version 1.0 (the "License").
7    * You may not use this file except in compliance with the License.
8    * You may obtain a copy of the License at
9    * http://www.eclipse.org/legal/epl-v10.html
10   */
11  /*
12   * File: DataRow.java
13   * Created: 2007-05-07
14   * Author: entrop, kpietak
15   * $Id: DataRow.java 2308 2009-01-12 22:33:45Z kpietak $
16   */
17  
18  package pl.edu.agh.cast.rawdata;
19  
20  import java.util.LinkedList;
21  
22  import pl.edu.agh.cast.rawdata.logging.AbstractRawDataMonitorable;
23  import pl.edu.agh.cast.rawdata.logging.IRawDataObserver;
24  
25  /**
26   * Class which represents one row of data read from source data file. It contains list of strings object each
27   * representing one cell.
28   * 
29   * @author AGH CAST Team
30   * 
31   */
32  public class DataRow extends AbstractRawDataMonitorable {
33  	private static final long serialVersionUID = 1L;
34  
35  	/**
36  	 * Indicates that row has unspecified number in tabular data.
37  	 */
38  	public static final int UNSPECIFIED_ROW_NUMBER = -1;
39  
40  	private int rowNumber = UNSPECIFIED_ROW_NUMBER;
41  
42  	private LinkedList<String> cells;
43  
44  	/**
45  	 * Default constructor.
46  	 */
47  	public DataRow() {
48  		cells = new LinkedList<String>();
49  	}
50  
51  	// only package access
52  	void setRowNumber(int rowNumber) {
53  		this.rowNumber = rowNumber;
54  	}
55  
56  	public int getRowNumber() {
57  		return rowNumber;
58  	}
59  
60  	/**
61  	 * Replaces cells specified by index, by element.
62  	 * 
63  	 * @param index
64  	 *            index of cell to replace
65  	 * @param element
66  	 *            new element
67  	 * @return new element or <code>null</code> if specified index is out of bounds
68  	 */
69  	public String replace(int index, String element) {
70  		if (index < 0 || index > cells.size()) {
71  			return null;
72  		}
73  		String oldValue = cells.remove(index);
74  		cells.add(index, element);
75  
76  		notifyValueChanged(oldValue, element);
77  
78  		return element;
79  	}
80  
81  	/*
82  	 * --------------------------------------------------------------------------------------
83  	 * --------------------------DELEGATED METHODS----------------------------------
84  	 * --------------------------------------------------------------------------------------
85  	 */
86  
87  	/**
88  	 * Appends the specified element to the end of this list.
89  	 * 
90  	 * @param element
91  	 *            element to be inserted
92  	 * @return <code>true</code> (as per the general contract of Collection.add).
93  	 */
94  	public boolean add(String element) {
95  		return cells.add(element);
96  	}
97  
98  	/**
99  	 * Inserts the specified element at the specified position in this list. Shifts the element currently at that
100 	 * position (if any) and any subsequent elements to the right (adds one to their indices).
101 	 * 
102 	 * @param index
103 	 *            index at which the specified element is to be inserted
104 	 * @param element
105 	 *            element to be inserted
106 	 * @throws IndexOutOfBoundsException
107 	 *             if the specified index is out of range (<code>index < 0 || index > size()</code>).
108 	 */
109 	public void add(int index, String element) throws IndexOutOfBoundsException {
110 		cells.add(index, element);
111 	}
112 
113 	/**
114 	 * Returns the number of elements in this list.
115 	 * 
116 	 * @return the number of elements in this list.
117 	 */
118 	public int size() {
119 		return cells.size();
120 	}
121 
122 	/**
123 	 * Returns the element at the specified position in this list.
124 	 * 
125 	 * @param index
126 	 *            index of element to return
127 	 * @return the element at the specified position in this list.
128 	 * 
129 	 * @throws IndexOutOfBoundsException
130 	 *             if the specified index is out of range (<code>index < 0 || index > size()</code>).
131 	 */
132 	public String get(int index) throws IndexOutOfBoundsException {
133 		return cells.get(index);
134 	}
135 
136 	/**
137 	 * Removes the element at the specified position in this list. Shifts any subsequent elements to the left (subtracts
138 	 * one from their indices). Returns the element that was removed from the list.
139 	 * 
140 	 * @param index
141 	 *            the index of the element to removed
142 	 * @return the element previously at the specified position.
143 	 * @throws IndexOutOfBoundsException
144 	 *             if the specified index is out of range (<code>index < 0 || index > size()</code>).
145 	 */
146 	public Object remove(int index) throws IndexOutOfBoundsException {
147 		return cells.remove(index);
148 	}
149 
150 	/*
151 	 * --------------------------------------------------------------------------------------
152 	 * --------------------------OVERRIDED METHODS----------------------------------
153 	 * --------------------------------------------------------------------------------------
154 	 */
155 
156 	/**
157 	 * 
158 	 * {@inheritDoc}
159 	 * 
160 	 * @see java.lang.Object#toString()
161 	 */
162 	@Override
163 	public String toString() {
164 		StringBuffer res = new StringBuffer();
165 		res.append("[Row number: ").append(rowNumber).append(", Data: ") //$NON-NLS-1$//$NON-NLS-2$
166 		        .append(cells.toString()).append("]"); //$NON-NLS-1$
167 		return res.toString();
168 	}
169 
170 	/*
171 	 * --------------------------------------------------------------------------------------
172 	 * --------------------------HELPER METHODS---------------------------------------
173 	 * --------------------------------------------------------------------------------------
174 	 */
175 
176 	private void notifyValueChanged(String oldValue, String newValue) {
177 		for (IRawDataObserver observer : getObservers()) {
178 			observer.notifyValueChanged(this, oldValue, newValue);
179 		}
180 	}
181 }